我有一个发送大量电子邮件报告的系统(每天大约 500 多封电子邮件)。我不是垃圾邮件发送者 :) 电子邮件的数量并不多,但它们是循环发送的,我经常收到此错误“PHP 警告:邮件():无法执行邮件传递程序”。我知道这个问题有 PEAR::Mail_Queue 包。但是你能告诉我那个包是否真的有用吗,还是我需要寻找别的东西。非常感谢
4 回答
您可以使用PEAR 的 Mail_Queue 包直接通过 SMTP 服务器发送邮件 - 它也将在后台工作,因此不会延迟或增加您的脚本执行时间。
使用 Mail_Queue 包的另一个优点是您可以检索发送的每封邮件的 esmtp id 以用于记录目的 - 我不知道这是否可以使用 Zeta Mail 组件或任何其他组件。
我开发了许多面向公众的解决方案,也仅限于 Intranet,这些解决方案使用此组件并且没有遇到任何重大问题。
“PHP 警告:mail():无法执行邮件传递程序”
...意思就是它在锡上所说的。PHP 只会将电子邮件交给 Linux/Unix/POSIX 系统上的外部程序(由 php.ini 中的 sendmail_path 定义)。在某些情况下会返回错误。这不是 PHP 代码中的错误。
除非您的 MTA 配置非常糟糕,否则使用 SMTP 连接将无法解决问题。
您需要查看 MTA 中的日志以了解其无法发送邮件的原因 - 或将邮件可执行文件包装在日志记录脚本中。
An alternative could also be to send mails through an SMTP server directly. This saves you the round trip of PHP calling sendmail (or whatever MTA is used) "through the shell" in order to deliver the mail. For example the Zeta Mail component allows you to send mails directly through an SMTP server without needing a special extension for this.
你必须在邮件之间使用 sleep() 来解决这个问题。