【发布时间】:2011-07-05 18:25:57
【问题描述】:
我有一个发送大量电子邮件报告的系统(每天大约 500 多封电子邮件)。我不是垃圾邮件发送者 :) 这并不是大量的电子邮件,但它们是循环发送的,我经常收到此错误“PHP 警告:邮件():无法执行邮件传递程序”。我知道这个问题有 PEAR::Mail_Queue 包。但是你能告诉我那个包是否真的有用吗,还是我需要寻找别的东西。非常感谢
【问题讨论】:
标签: php email pear mail-queue
我有一个发送大量电子邮件报告的系统(每天大约 500 多封电子邮件)。我不是垃圾邮件发送者 :) 这并不是大量的电子邮件,但它们是循环发送的,我经常收到此错误“PHP 警告:邮件():无法执行邮件传递程序”。我知道这个问题有 PEAR::Mail_Queue 包。但是你能告诉我那个包是否真的有用吗,还是我需要寻找别的东西。非常感谢
【问题讨论】:
标签: php email pear mail-queue
你必须在邮件之间使用 sleep() 来解决这个问题。
【讨论】:
另一种方法是直接通过 SMTP 服务器发送邮件。这为您节省了 PHP 调用 sendmail(或任何使用的 MTA)“通过 shell”以传递邮件的往返行程。例如,Zeta Mail component 允许您直接通过 SMTP 服务器发送邮件,而无需为此进行特殊扩展。
【讨论】:
“PHP 警告:mail(): 无法执行邮件传递程序”
...意思就是它在锡上的意思。 PHP 只会将电子邮件交给 Linux/Unix/POSIX 系统上的外部程序(由 php.ini 中的 sendmail_path 定义)。在某些情况下会返回错误。这不是 PHP 代码中的错误。
除非您的 MTA 配置非常糟糕,否则使用 SMTP 连接将无法解决问题。
您需要查看 MTA 中的日志以了解其无法发送邮件的原因 - 或将邮件可执行文件包装在日志记录脚本中。
【讨论】:
您可以使用PEAR's Mail_Queue package 直接通过 SMTP 服务器发送邮件 - 它也将在后台运行,因此不会延迟或增加您的脚本执行时间。
使用 Mail_Queue 包的另一个优点是您可以检索发送的每封邮件的 esmtp id 以用于记录目的 - 我不知道这是否可以通过 Zeta Mail 组件或任何其他组件实现。
我开发了许多面向公众的解决方案,也仅限于 Intranet,这些解决方案使用此组件并且没有遇到任何重大问题。
【讨论】: