我正在改进mail()
循环使用的 PHP 邮件列表代码,同时遍历所有订阅者。该脚本用于显示“超过 30 秒的最大执行时间”错误,我通过添加set_time_limit(0);
.
现在没有错误,但发送 100 条消息大约需要 7 分钟。我有哪些选择?
在密件抄送中向所有订阅者发送一条消息会有所帮助,还是“在幕后”相同?
我正在改进mail()
循环使用的 PHP 邮件列表代码,同时遍历所有订阅者。该脚本用于显示“超过 30 秒的最大执行时间”错误,我通过添加set_time_limit(0);
.
现在没有错误,但发送 100 条消息大约需要 7 分钟。我有哪些选择?
在密件抄送中向所有订阅者发送一条消息会有所帮助,还是“在幕后”相同?
通过在密件抄送中指定它们来发送给所有订阅者应该更快。虽然,虽然它对于某些私人环境可能是一个不错的选择,但我不建议在公共网页/系统中这样做,因为许多人可能认为此类电子邮件是垃圾邮件。
一种选择是通过 cron 作业发送电子邮件。在这种情况下,发送一封电子邮件需要多少时间并不重要,只要最终发送所有电子邮件即可。
以密件抄送方式发送给所有人会快很多。代码将执行得更快,并且mail()
只会执行一次。
这是快速修复,但如前所述,大型密件抄送列表是通往垃圾邮件文件夹的安全途径。但是,使用mail()
也是垃圾邮件的确定目的地。
如果您想真正改进它,请使用SourceForge 的 PHPMailer,并使用 cron 一次通过 SMTP(更少的垃圾邮件命中)发送 X 电子邮件。
PHP 文档状态:
注意:
值得注意的是,该mail()
功能不适合循环处理大量电子邮件。此函数为每封电子邮件打开和关闭一个 SMTP 套接字,效率不高。要发送大量电子邮件,请参阅
» PEAR::Mail
和» PEAR::Mail_Queue
包。
由于您只是在询问选项,因此这里有一些:
mail()
函数通常是不可取的,特别是因为存在更好的替代品,如 swiftmail 或 Zend_mail。尽管这些对于小型邮寄要求来说可能是多余的Cron Job 是更好的主意。我使用了它并且它可以工作......您的代码配置文件将帮助您找出问题所在。
我确实建议通过密件抄送发送邮件,因为它会快很多。您的脚本只需与 SMTP 服务器建立一个连接,该服务器将为您完成其余的工作。
我也会看看例如 PHPMailer 或 PEAR::Mail。用于批量邮件的 mail() 方法的坏处在于,它将为每封发送的电子邮件打开一个到 SMTP 服务器的新套接字。一个好的邮件库将创建一次到 SMTP 服务器的套接字连接,然后将发送所有电子邮件并在最后关闭它。
为了加快速度,您还可以查看您的 SMTP 服务器配置(如果可能)并尝试增加守护进程等。您可能还需要考虑某些 SMTP 服务器具有您可以发送的最大值。