php - 在 symfony2 中限制每秒 swiftmailer 电子邮件

标签 php symfony amazon-web-services swiftmailer amazon-ses

我正在设置 SES 以使用 SMTP2。 SES 帐户的限制之一(至少默认情况下)是每秒 5 封电子邮件的限制。

我想设置一个假脱机程序,如 this article 中所述.我可以使用 cron 每分钟触发一次,这对我来说很好。不过,我担心的是,大量电子邮件将在此后台处理程序中排队,我的服务器将尝试一次发送所有电子邮件。

文章列出了一种限制每次执行发送的电子邮件总数的方法,以及一种限制执行时间的方法。两者都不适合我的用例:限制每秒发送的电子邮件数。

有什么方法可以限制后台处理程序发送电子邮件的速率吗?

最佳答案

更好的解决方案

使用 Throttler 插件/相当/简单。

我将使用 YML,因为这对我来说更明智:

您必须定义一组自定义服务。可能有/稍微/更好的方法来做到这一点,但它应该有效。

首先,定义您的调速器服务:

services:
  my.throttler:
    class: Swift_Plugins_ThrottlerPlugin
    arguments: [300, 2]

现在定义您自己的邮件程序实例:

services:
  my.mailer:
    class: Swift_Mailer
    arguments: [@swiftmailer.transport]
    calls:
      - [ registerPlugin, [ @my.throttler ] ]

这应该设置您使用服务 my.mailer 以每秒 5 次的速度发送节流电子邮件。

原始答案

您将不得不扩展默认队列处理程序以使其在更高级的分辨率下工作。

Swift_Transport_SpoolTransport 是您要开始查看的位置。

另一种选择是构建一个命令来运行一个守护进程服务,该服务使用参数 --time-limit=1 --message-limit=5 运行默认的 spool。每次失败时都会重新运行。

扩展 SpoolTransport 显然是更明智的选择,尽管第二个解决方案通常会更加密集地跟踪。

关于php - 在 symfony2 中限制每秒 swiftmailer 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572649/

相关文章:

javascript - Ajax 不在由 ajax 填充的 div 中触发

javascript - WordPress JQuery 未运行插件

php - 第 18 行出现 fatal error : Call to a member function prepare() on a non-object in C:\wamp\www\motor-house\public_html\User. class.php

forms - 交响乐 2.8.x : Custom FormType overwrites form variables

java - 如何在 AWS ElasticBeanStalk 的 CircleCI 部署中指定版本标签

php - 允许通过 PHP 访问 protected 文件

symfony - 创建一个仅使用 Symfony2 控制台组件的项目

symfony - 如何正确安装 SonataDoctrineMongoDBAdminBundle?

java - 使用 xml 输入/输出在现有主机上将 C++ 实现为 Web 服务

c# - Dynamodb putitem 功能无法正常工作