抱歉,评论被关闭
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