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

分类:PHP,问题集 | 作者:凹凸曼 | 发表于2011/03/16

通过 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, 问题集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »