【问题标题】:best way to send mass emails without slow page load在没有缓慢页面加载的情况下发送大量电子邮件的最佳方法
【发布时间】:2012-12-15 03:16:20
【问题描述】:

我的脚本发送新评论的通知电子邮件,这可能是给 50 个成员,需要发送 50 封电子邮件,这可能需要 20 秒,这对于用户来说等待的时间太长了! PHP中最好的方法是什么,有没有异步的方法?

【问题讨论】:

  • 太长了!您可以安排 CRON 定期运行 PHP 脚本并发送电子邮件。
  • 此外,如果您要发送带有附件的电子邮件,您需要将它们批量化。 Symfony 的 Switftmailer 有 antiflood control 和 alternative transports。注意,你不需要 Symfony 框架来使用 Swiftmailer(或者它的包/组件,如果它们是按照规范编写的)。哦,还包括一个 Logger 插件,因此您可以跟踪成功。
  • (以及基于网络的cron table manager...)

标签: php email


【解决方案1】:

有没有异步的方法?

是的,有!

exec('wget PATH_TO_YOUR_SCRIPT_THAT_SENDS_THE_NEWSLETTER > /dev/null &');

请注意,数据库替代方案也是一个很好的替代方案。但是,如果您使用的是 Linux(并且不需要数据库),这也应该可以工作。

【讨论】:

    【解决方案2】:

    一种简单的方法可能是将必要的信息(电子邮件地址、内容)存储在数据库中,并使用 cron 作业每分钟左右运行一次批处理。批处理可以在数据库中查询待处理的电子邮件,如果有任何要发送的邮件,请检查它们,然后删除数据库条目。

    【讨论】:

      【解决方案3】:

      确实可以异步完成。

      最简单的方法是将电子邮件数据插入数据库而不是实际运行电子邮件,然后有一个定期实际发送电子邮件的 cron 作业。

      当然还有其他方法,但这可能是最直接的。

      【讨论】:

        【解决方案4】:

        您可以使用 cURL POST 来启动异步脚本。将超时设置为较短的时间,以便您的脚本可以在发出 POST 请求后恢复。您可以在 POST 请求中设置电子邮件信息,也可以将其存储在数据库表中。

        【讨论】:

          【解决方案5】:

          我会使用 RabbitMQ 之类的东西。您的网站就像一个生产者向 Rabbit 发送电子邮件请求;然后让消费者运行来处理来自 Rabbit 的请求。

          优点 - 如果您的消费者摔倒了,那么当您重新启动时,它将从上次中断的地方拾取(上次确认的请求)。

          【讨论】:

          • 特别是如果您需要尽可能多地通过电子邮件。由于所有垃圾邮件防御措施都存在,发送电子邮件很棘手。
          猜你喜欢
          • 2014-01-10
          • 2011-07-02
          • 2012-09-20
          • 2012-01-06
          • 2011-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-03
          相关资源
          最近更新 更多