php - 使用 Swiftmailer 和 Symfony2 的多个线轴

标签 php email symfony cron swiftmailer

使用 Swiftmailer 发送尽可能高的电子邮件的最佳方法是什么?

我们拥有电子邮件自动化工具,有时单次发送的电子邮件可达 40,000 封。我们使用 spool:send 命令的平均速率约为每分钟 50 封电子邮件。我尝试在 cron 上复制相同的命令 5 次,它成功了(即,它每分钟发送约 250 封电子邮件),但看起来 SMTP 服务器感到头晕,因为某些联系人正在接收带有另一个联系人信息的电子邮件(任何知道是什么原因造成的吗?)。

所以现在我正在考虑设置 5 个不同的邮件程序,将电子邮件存储在不同的文件夹中,并使用 cron 运行 5 个命令,每个命令针对其中一个邮件程序。应该有效吗?还有其他推荐的解决方案吗?

最佳答案

如果您每分钟发送 250 封电子邮件,那么您需要比 cron 和 Swiftmailer 假脱机更具弹性的东西。它将很难扩展,调试起来会是一场噩梦,而且也不是很不灵活。如果您每分钟发送的电子邮件不超过几封,那么 Swiftmailer 假脱机就非常有用,但如果超过这个数量,就很难扩展,而且调试起来也是一场噩梦。

相反,请使用类似 PHP Resque 的作业队列或Rabbit MQ (两者都是开源的)。您可以通过需要发送的电子邮件队列来复制“假脱机”,并且可以添加多个工作人员和队列。您还可以有第二个队列,它将作业实际添加到第一个队列中。

优点是 Rabbit MQ 带有管理器界面,因此您可以看到正在发送的电子邮件数量、失败的电子邮件数量等。此外,在以下情况下通过添加和删除工作人员更容易扩展和缩小规模:例如,您的负载很重。

来自 Sensio Labs 的 Kacper 去年实际上就 Rabbit MQ 与 Symfony 进行了演讲 - http://www.slideshare.net/cakper/2014-0821-symfony-uk-meetup-scaling-symfony2-apps-with-rabbit-mq .

关于php - 使用 Swiftmailer 和 Symfony2 的多个线轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29378456/

相关文章:

ruby-on-rails - Rails 4/5 发送动态 ActionMailer::Base.mail 电子邮件,附件标记为 Noname

email - Powershell-编写来自Exchange的电子邮件的脚本

symfony - 如何覆盖每个环境的 Symfony2 语义配置?

mysql - "1064 You have an error in your SQL"尝试使用 Symfony2 和 Doctrine2 执行 INSERT

python - Django AllAuth - 如何手动发送重置密码电子邮件?

php - Symfony 在 CLI 命令中捕获 PHP 错误

php 将固定日期值添加到 strtotime()

javascript - 如何在没有抗锯齿的情况下将缩放文本作为图像

javascript - 使用 HTML/PHP/AJAX 将行插入数据库

php - 文本文件 - 定义占位符,通过 PHP 读取 - 在网站上生成 HTML/CSS