在循环中发送大量电子邮件

问题描述:

我有一个系统发送大量的电子邮件报告(每天约有超过500封电子邮件)。我不是一个垃圾邮件发送者:)这不是一大堆的电子邮件,但他们发送循环,我经常得到这个错误“PHP警告:邮件():无法执行邮件传递程序”。我知道有这个问题的PEAR :: Mail_Queue包。但是,如果这个软件包是真正有用的东西,或者我需要寻找其他东西,请让我知道。非常感谢在循环中发送大量电子邮件

你必须在邮件之间使用sleep(),这可以解决这个问题。

+0

感谢您的回答。但是,我担心,这会增加脚本执行时间,不是吗? – alagar 2011-02-28 13:27:48

+1

Heya队友,它会为你的执行增加一点时间,但它不会计入最大执行时间。因此,一天一次500封邮件,甚至5000封邮件都无关紧要。 – 2011-03-03 09:58:00

另一种方法也可以是直接通过SMTP服务器发送邮件。这节省了您通过“通过shell”调用sendmail(或使用任何MTA)来传递邮件的往返行程。例如,Zeta Mail component允许您直接通过SMTP服务器发送邮件,而不需要特殊扩展。

“PHP的警告:电子邮件():无法执行邮件传递计划”

...含义正是它在锡说。 PHP只会将电子邮件转移到Linux/Unix/POSIX系统上的外部程序(由php.ini中的sendmail_path定义)。并且在某些情况下返回错误。这不是PHP代码中的错误。

除非你有一个非常糟糕的MTA配置,否则问题将不会通过使用SMTP连接来解决。

您需要查看MTA中的日志,了解其无法发送邮件的原因 - 或者将邮件可执行文件封装在日志脚本中。

您可以使用PEAR's Mail_Queue package直接通过SMTP服务器发送邮件 - 也可以在后台运行,因此不会延迟或增加脚本执行时间。

使用Mail_Queue包的另一个优点是,您可以检索为记录目的而发送的每封邮件的esmtp ID - 我不知道这是否可以使用Zeta Mail组件或任何其他邮件组件。

我已经开发了一些面向公众的和仅限于局域网的解决方案,它使用这个组件并且没有任何重大问题。