- 分享
- 0
- 人气
- 194
- 主题
- 2354
- 帖子
- 9787
- UID
- 1
- 积分
- 38517
- 阅读权限
- 255
- 注册时间
- 2003-10-7
- 最后登录
- 2024-9-8
- 在线时间
- 65535 小时
|
转载 http://www.discuz.net/viewthread ... p;page=1#pid5851334
之前用php mail()没有发现问题,直到最近由于某些原因需要改用smtp发邮件时,发现DZ6.0声称成功送出邮件但对方没有收到。经参考过相关帖尝试各种参数后仍然没有解决问题,起初以为对方的服务器把邮件当成垃圾邮件处置,但翻查纪录后证实根本没有邮件送出,问题出在哪呢?经过两天两夜不眠不休地测试并把源码翻来覆去地钻研,发现这并不是参数设置错误引起的,而是源码内的一个BUG。
原因是:当smtp服务器反应慢或者网络比较慢时,DZ在未收到smtp服务器的回应之前就过早地把连接关闭掉,于是smtp服务器就弃掉了邮件,出现邮件被吞掉的假象。这种现象在smtp服务器及网络速度都较快时是不会出现,邮件能正常送出。
但为什么会过早地关掉连接呢?因为这是一个BUG,而且翻查后发现,这个BUG原来从旧版本一直沿袭至今。修补办法如下:
- 打开include\sendmail.inc.php文件
- 找到fputs($fp, "QUIT\r\n");这一行
- 在这一行之前插入如下代码:
- $lastmessage = fgets($fp, 512);
- if(substr($lastmessage, 0, 3) != 250) {
- $errorlog('SMTP', "($mail[server]mail[port]) DATA - $lastmessage", 0);
- }
复制代码 经修正后,DZ会等待smtp服务器的正式回应后才会把连接关闭掉,保证了邮件正常发送。 |
|