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