我需要在开发票循环期间发送个性化电子邮件。意味着每个客户都会收到一封电子邮件,例如“亲爱的Joe Smith先生,......”。生成这些邮件很好,没有错误。
一旦我发送它们,Send()
方法的每次调用似乎都会发送个人邮件。这意味着脚本连接到SMTP服务器,丢弃邮件然后断开连接。这是非常耗时的,因为我发送了数百封电子邮件。它导致PHP执行时间溢出。使用大型附件时尤其如此。
我想知道是否有变化可以先将所有电子邮件发送到某种缓冲区或管道。循环结束后,仅建立一次连接。更好的是做某种背景工作。
有什么想法吗?
答案 0 :(得分:1)
使用CakePHP中的Mail
传输并在您的网络服务器中设置后缀,以充当您使用的SMTP服务器的中继。这种方法比你在php中做的任何其他方法快几个数量级。
答案 1 :(得分:0)
不,the default SMTP adapter不能这样做。
您可以扩展SMTP适配器并覆盖它,或者根据需要实现该功能进行更改。
PersistentStmpTransport extends SmtpTransport {
/* ... */
}
快速浏览一下,最多可以在30-60分钟内完成。顺便说一句,我认为你的论证是有效的,我很惊讶这已经没有在传输中实现了。
答案 2 :(得分:0)
只了解概念。
CakeEmail只发送电子邮件
然后,您可能需要使用队列。
有一个插件,结帐http://github.com/dereuromark/cakephp-queue
你可能需要CRON才能进行计划。