【问题标题】:Limit swiftmailer emails per second in symfony2在 symfony2 中限制每秒 swiftmailer 电子邮件
【发布时间】:2012-07-20 03:55:28
【问题描述】:

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

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

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

有没有办法限制从后台处理程序发送电子邮件的速率?

【问题讨论】:

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


    【解决方案1】:

    更好的解决方案

    使用 Throttler 插件 /fairly/ 很简单。

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

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

    首先,定义您的节流器服务:

    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。每次失败时都会重新运行。

    扩展 SpoolTransport 显然是更明智的选择,尽管通常第二个分辨率会更密集地跟踪。

    【讨论】:

    • 确实,对于 swiftmailer,速率限制似乎必须是每分钟,而不是每秒。 Symfony 中似乎也不支持这个 swiftmailer 插件(节流)。我已经向 SF 提出了一个问题,要求他们添加它。
    • 奇怪,我用 Symfony 2 的油门插件没有问题。
    • $this->mailer->registerPlugin(new \Swift_Plugins_ThrottlerPlugin( 30, \Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE )); 30 是每分钟的消息数。找到 [这里] (swiftmailer.org/docs/plugins.html#throttler-plugin)。如果将其设置为 60,它将通过秒发送 1 条消息...
    【解决方案2】:

    现在,您可以将配置 antiflood 与 swiftmailer 一起使用(参见http://symfony.com/doc/current/reference/configuration/swiftmailer.html#antiflood

    示例

    swiftmailer:
        transport: "%mailer_transport%"
        host:      "%mailer_host%"
        username:  "%mailer_user%"
        password:  "%mailer_password%"
        spool:
            type: file
            path: '%kernel.root_dir%/spool'
        antiflood:
            threshold:            1
            sleep:                1
    

    这将每秒发送 1 封电子邮件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2014-09-26
      • 1970-01-01
      • 2019-05-18
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多