【发布时间】:2017-08-01 23:52:54
【问题描述】:
在插入表格后,我使用 PHPmailer 构建了一个电子邮件脚本,但是,由于脚本超时,我得到了一个错误的网关 502。并且发送 300 多封电子邮件以响应网络请求对我来说听起来不是一个好主意。所以我的问题是如何建立一个在后台发送电子邮件的队列?
据我了解,我将需要新表让我们说 email_queue_table 插入电子邮件地址、内容,然后发送一个名为 status 的字段或排队创建一个类似于 if($status == "queued"){ //then send the email here} else{ // nothing to be sent.} 的 while 循环
如果您知道一种更有效/更好的方法,我会全力以赴。谢谢你的帮助。
【问题讨论】:
-
您已经有了一个听起来不错的计划。试试看它是否有效。
-
你所拥有的逻辑是正确的。有一个选择少量数量的脚本(例如,一次 50 个 - SQL 中的
LIMIT 0, 50)。将状态标记为已发送/发送失败。重复直到到达列表的末尾。可能有一些东西可以尝试并重新发送任何失败的东西,但将其限制为一定数量的尝试(您可以有一个用于重新发送尝试的字段,每次尝试都会增加)。您不能通过浏览器运行此脚本,因为它会超时。您必须从 PHP CLI 运行它或使用 ajax 请求触发它。可以使用 cron 作业定期运行它。 -
将电子邮件与状态一起存储在数据库中是个好主意。您还可以考虑在队列运行时生成电子邮件的内容以减少数据库中的数据。另一个会增加复杂性但可能效果很好的选择是使用 Redis 队列和工作人员,一次从队列中接收和发送电子邮件。它有点复杂,但想补充一点,以防其他人觉得它有用。
-
@bob 我已经发布了一个答案。如果有帮助,我们将不胜感激。