2014-11-14 67 views
0

我每天发送一封邮件,每天发送给人员列表。我使用PHP和PHPMailer对象来发送电子邮件。SMTP错误问题 - PHPMailer

这一直工作正常,直到今天,当我没有收到一封电子邮件(试验),我检查日志以发现间歇我得到SMTP错误从

回来之类的
mail->Send(); 

方法对一些人 - 不是全部。

除了名称和电子邮件地址外,所有电子邮件的大小(字符长度)完全相同。

$mail->ErrorInfo; 

错误细节包括这两个错误

SMTP错误:数据不被接受。 <p> SMTP服务器错误:2.1.5好的

SMTP错误:数据未被接受。 < p & gtSMTP服务器错误:</P >

为什么有断p标签错误消息我不知道 - 也就是为什么第一个错误中有OK?

但是循环中的其他人有电子邮件出来罚款。

此外,当我把脚本放入测试模式时,只有这些失败通过电子邮件发送出去(所以一次脚本调用=一封电子邮件给一个人),我发现没有问题,人们得到了他们的电子邮件。

现在我问技术支持是什么意思,并回到“谷歌它”,我无法找到任何地方的错误2.1.5。我真的不明白为什么它在错误之后说得好。

作为明天的测试,我对失败的发送进行了一次测试,然后再次尝试进行5秒的测试。

我不知道这是否会有所帮助,但我认为也许我的SMTP服务器与我的脚本(Rackspace VPS Linux)位于同一台服务器上,并且存在临时连接问题,因此在这种情况下睡眠可能非常方便。

这是我第一次遇到这个问题,我没有重新启动APACHE或我的服务器(或邮件服务器),在这个脚本之前我有另外一个发出403电子邮件没有任何问题。

这将是很高兴知道错误是什么以及它为什么发生。

罗布

回答

0

被定义的错误正是你希望它是 - 在the RFC that defines SMTP error codes。 2.1.5表示“目标地址有效”。它以2开头意味着它不是一个错误,而是一个响应代码 - 警告和错误从4和5开始。为什么你明白了,我不知道,但它肯定似乎不是在这种情况下预期的。邮件服务器通常会遇到问题 - 磁盘空间不足,被垃圾邮件过滤淹没,这就是邮件服务器有队列的原因。直接使用PHPMailer的SMTP类发送不适合大批量发送 - 使用SMTP很好,但将其指向适当的(附近的)MTA可正确处理传送。

至于乱码ErrorInfo的内容,我怀疑您使用的是PHPMailer的旧版本 - 最近调试输出已经清理完毕。最近更改的另一件事情是在单个发送给多个收件人(例如BCC)期间处理错误 - 现在它更有可能在没有放弃的情况下到达长收件人列表的末尾。

+0

如果错误不是真的错误,那么消息重试之间的睡眠也会有所帮助。我在看的响应代码页面没有显示2.1.5,所以我没有看到任何提及。如果2表示“目标地址有效”,那么.1和.5是什么意思?无论如何要找出答案。难道它只是一个淹没邮件服务器的情况吗?在这种情况下,每个电子邮件发送和重试帮助之间会有更长的超时时间? – MonkeyMagix 2014-11-19 10:46:19

+0

它以“2”开头表示它是成功代码(请参阅第2节)。它后面的'.1'表示它是一个地址状态(也是第2节),整个'* .1.5'模式在3.2节列出。并非所有的前缀和状态组合都是有意义的 - 例如5.1.7对垃圾邮件过滤器的拒绝是有意义的,但是对于被垃圾邮件过滤器接受,2.1.7没有任何意义! – Synchro 2014-11-19 15:01:39

+0

你可以尝试设置'$ mail-> SingleTo = true;',它会分别发送每条消息(如果你设置了多个'to'地址),这可能会给你一个更精确的反馈。您也可以尝试打开/关闭SMTPKeepAlive。除非你发送大量数据(数千个),否则增加延迟可能无济于事。 – Synchro 2014-11-19 15:05:17

相关问题