请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Discuz! 官方站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Discuz! X 最新研发动态 通过这个窗口,关注跟踪我们的研发进展 Discuz! 开发技术文库 - 给官方提建议

Discuz! X2 正式版下载 帮助网站实现一站式服务  商业支持服务咨询 下载 - 安装 - 常见问题 - 转换 - 讨论 - 购买

2012站长年会开启报名 限量船票免费发放 Discuz!十大荣誉用户评选 - Discuz!NT3.6发布 漫游引入QQ空间游戏 -一骑新区横扫三国-5d6d免费论坛

查看: 31489|回复: 81

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

Rank: 1

UID
789857
积分
11
帖子
14
威望
0
在线时间
0 小时
注册时间
2007-8-31
发表于 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 编辑 ]

Rank: 2

UID
458145
积分
54
帖子
67
威望
0
在线时间
0 小时
注册时间
2006-10-9
发表于 2007-9-2 01:02:12 |显示全部楼层
我按楼主的修改了以后,虽然没有提示了,而且显示发送成功,可是为何收不到邮件呢?
相同的设置,在PHPWind 5.3里面都是OK的,在DZ里面就不行。这一点根向PW学习了!

[ 本帖最后由 iso86.com 于 2007-9-2 01:05 编辑 ]
RoHS ISO_ 中国质量人联盟 olqc.com

使用道具 举报

Rank: 1

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

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


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 编辑 ]

使用道具 举报

Rank: 1

UID
284746
积分
18
帖子
15
威望
0
在线时间
1 小时
注册时间
2005-12-12
发表于 2007-9-5 22:38:34 |显示全部楼层
DZ 6.0
測試成功~

sendmail.inc.php 修改

邮件参数设置
是重點!

謝謝分享~

使用道具 举报

Rank: 2

UID
759529
积分
147
帖子
84
威望
0
在线时间
13 小时
注册时间
2007-7-17
发表于 2007-9-14 00:10:30 |显示全部楼层
用第一种php发送方法适用么?

使用道具 举报

Rank: 8Rank: 8

UID
790125
积分
3992
帖子
4274
威望
3
在线时间
530 小时
注册时间
2007-9-1
发表于 2007-10-1 22:03:36 |显示全部楼层
希望用过的 给个 消息 。 好不好用啊 ???

使用道具 举报

Rank: 3Rank: 3

UID
627652
积分
289
帖子
271
威望
0
在线时间
28 小时
注册时间
2007-1-26
发表于 2007-10-2 09:09:05 |显示全部楼层
我按上述方法试了,没成功!

使用道具 举报

Rank: 8Rank: 8

UID
790125
积分
3992
帖子
4274
威望
3
在线时间
530 小时
注册时间
2007-9-1
发表于 2007-10-2 09:45:40 |显示全部楼层
我按上述方法试了,没成功!

使用道具 举报

Rank: 4

UID
232581
积分
558
帖子
441
威望
0
在线时间
50 小时
注册时间
2005-8-8
发表于 2007-10-2 12:05:01 |显示全部楼层
测试邮件成功,发通知不成功。我按上述方法试了,也没成功!
免费提供法律援助,欢迎站长申请:http://www.mylawcn.com/thread-2456-1-1.html

使用道具 举报

Rank: 3Rank: 3

UID
688132
积分
315
帖子
388
威望
0
在线时间
0 小时
注册时间
2007-3-28
发表于 2007-10-2 12:22:04 |显示全部楼层
不成功~~~~~~
天下風雲出我輩, 一入江湖歲月催. 皇圖霸業談笑中, 不勝人生一場醉

使用道具 举报

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

fastpost

手机版|Archiver|北京康盛新创科技有限责任公司 ( 京ICP证110024号|京网文[2011]0019-007号 )  

GMT+8, 2012-2-9 14:21 , Processed in 0.118139 second(s), 16 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部