Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

采用smtp发邮件时发现DZ6.0声称成功送出邮件但对方没有收到

[复制链接]
fredlou 发表于 2007-9-1 01:30:45 | 显示全部楼层 |阅读模式
之前用php mail()没有发现问题,直到最近由于某些原因需要改用smtp发邮件时,发现DZ6.0声称成功送出邮件但对方没有收到。经参考过相关帖尝试各种参数后仍然没有解决问题,起初以为对方的服务器把邮件当成垃圾邮件处置,但翻查纪录后证实根本没有邮件送出,问题出在哪呢?经过两天两夜不眠不休地测试并把源码翻来覆去地钻研,发现这并不是参数设置错误引起的,而是源码内的一个BUG。
原因是:当smtp服务器反应慢或者网络比较慢时,DZ在未收到smtp服务器的回应之前就过早地把连接关闭掉,于是smtp服务器就弃掉了邮件,出现邮件被吞掉的假象。这种现象在smtp服务器及网络速度都较快时是不会出现,邮件能正常送出。
但为什么会过早地关掉连接呢?因为这是一个BUG,而且翻查后发现,这个BUG原来从旧版本一直沿袭至今。修补办法如下:
  • 打开include\sendmail.inc.php文件
  • 找到fputs($fp, "QUIT\r\n");这一行
  • 在这一行之前插入如下代码:
  1. $lastmessage = fgets($fp, 512);
  2. if(substr($lastmessage, 0, 3) != 250) {
  3. $errorlog('SMTP', "($mail[server]mail[port]) DATA - $lastmessage", 0);
  4. }
复制代码
经修正后,DZ会等待smtp服务器的正式回应后才会把连接关闭掉,保证了邮件正常发送。

[ 本帖最后由 fredlou 于 2007-9-1 02:10 编辑 ]
iso86.com 发表于 2007-9-2 01:02:12 | 显示全部楼层
我按楼主的修改了以后,虽然没有提示了,而且显示发送成功,可是为何收不到邮件呢?
相同的设置,在PHPWind 5.3里面都是OK的,在DZ里面就不行。这一点根向PW学习了!

[ 本帖最后由 iso86.com 于 2007-9-2 01:05 编辑 ]
回复

使用道具 举报

 楼主| fredlou 发表于 2007-9-3 10:35:47 | 显示全部楼层
由于区域对象不同,我使用的是DZ6.0的繁体UTF8版本。
不知你的参数设置如何,但我就使用了gmail(gamil需要ssl),在修补前进行检测参数测试时很快就弹出以下对话框,但实际上邮件被gmail弃掉了:

修补后,DZ需要多等2秒才弹出对话框,并且邮件真的成功送出,也存在于我的gmail寄件备份中,对方的邮箱也收到了该两封测试邮件(一是单发,另一是群发)。之后再使用[论坛通知]测试一下,也确实成功了。以下是我的邮件参数设置:


DZ6.0以前的版本就只能修改根目录下的mail_config.php文件:
  1. $mailsend = 2;                // 邮件发送方式        0=不发送任何邮件
  2.                         //                1=通过 PHP 函数及 UNIX sendmail 发送(推荐此方式)
  3.                         //                2=通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)
  4.                         //                3=通过 PHP 函数 SMTP 发送 Email(仅 win32 下有效, 不支持 ESMTP)
  5. $mailcfg['server'] = 'ssl://smtp.gmail.com';                // SMTP 服务器

  6. $mailcfg['port'] = '465';                                // SMTP 端口, 默认不需修改

  7. $mailcfg['auth'] = 1;                                // 是否需要 AUTH LOGIN 验证, 1=是, 0=否

  8. $mailcfg['from'] = '{username}@gmail.com';        // 发信人地址 (如果需要验证,必须为本服务器地址)

  9. $mailcfg['auth_username'] = '{username}@gmail.com';                // 验证用户名

  10. $mailcfg['auth_password'] = '{password}';                // 验证密码
复制代码

[ 本帖最后由 fredlou 于 2007-9-5 22:58 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

philos324 发表于 2007-9-5 22:38:34 | 显示全部楼层
DZ 6.0
測試成功~

sendmail.inc.php 修改

邮件参数设置
是重點!

謝謝分享~
回复

使用道具 举报

surenkid 发表于 2007-9-14 00:10:30 | 显示全部楼层
用第一种php发送方法适用么?
回复

使用道具 举报

白垩纪 发表于 2007-10-1 22:03:36 | 显示全部楼层
希望用过的 给个 消息 。 好不好用啊 ???
回复

使用道具 举报

day158 发表于 2007-10-2 09:09:05 | 显示全部楼层
我按上述方法试了,没成功!
回复

使用道具 举报

白垩纪 发表于 2007-10-2 09:45:40 | 显示全部楼层
我按上述方法试了,没成功!
回复

使用道具 举报

tnka 发表于 2007-10-2 12:05:01 | 显示全部楼层
测试邮件成功,发通知不成功。我按上述方法试了,也没成功!
回复

使用道具 举报

dragonchang 发表于 2007-10-2 12:22:04 | 显示全部楼层
不成功~~~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 09:42 , Processed in 0.040301 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表