SOCKET 连接 SMTP 服务器不能发送邮件(AUTH LOGIN – 250-quarkmail.com Hello uchome)

分类:PHP,问题集 | 作者:凹凸曼 | 发表于2011/03/16 SOCKET 连接 SMTP 服务器不能发送邮件(AUTH LOGIN – 250-quarkmail.com Hello uchome)已关闭评论

通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)的方式
UCHOME出现了一个BUG,没有看到官方修复!

首先测试了常用的163邮箱,没有问题

但是连接自己的smtp服务器就会报如下错误:

<?PHP exit;?> 2011-03-15 10:40:48  124.115.0.15 0 /do.php?ac=sendmail&rand=1300156838 (mail.scol.com.cn:25) AUTH LOGIN – 250-quarkmail.com Hello uchome
<?PHP exit;?> 2011-03-15 11:05:36  221.237.164.115 908055 /do.php?ac=sendmail&rand=1300158336 (smtp.scol.com.cn:25) AUTH LOGIN – 250-quarkmail.com Hello uchome

确实看上去有点郁闷!

不过看了UCHMOE发邮件的代码(位置:source/function_sendmail.php下),还看不出什么问题,

经过一些测试发现,

这几行代码就是报错原因:

 <?php

  fputs($fp, “AUTH LOGIN\r\n”);
   $lastmessage = fgets($fp, 512);
   if(substr($lastmessage, 0, 3) != 334) {
    runlog(‘SMTP’, “($mail[server]:$mail[port]) AUTH LOGIN – $lastmessage”, 0);
    return false;
   }

?>

认证登录,$lastmessage会得到上一次请求返回的数据,

这是为什么呢!

我就想,也许是上一次 指针没有指向结尾的地方

因此产生这样的结果!

解决办法:

  fputs($fp, ($mail[‘auth’] ? ‘EHLO’ : ‘HELO’).” uchome\r\n”);
  
  $lastmessage = fgets($fp, 512);

前加一行代码:

fgets($fp,4096);

  fputs($fp, ($mail[‘auth’] ? ‘EHLO’ : ‘HELO’).” uchome\r\n”);
  
  $lastmessage = fgets($fp, 512);

搞定!

本文出自 “凹凸曼” 博客,请务必保留此出处http://www.apoyl.com/?p=350

日志信息 »

该日志于2011-03-16 01:23由 凹凸曼 发表在PHP, 问题集分类下, 评论已关闭。

目前盖楼

抱歉,评论被关闭

« »