我正在设置SES以使用SMTP2。 SES帐户的一个限制(默认情况下至少为每秒5封电子邮件限制。
我想设置假脱机程序,如this article中所述。我可以使用cron每分钟触发它,这对我的目的来说很好。不过,我担心的是,这个假脱机程序中会有大量的电子邮件排队,而我的服务器会尝试一次性发送所有这些邮件。
本文列出了一种限制每次执行发送的电子邮件总数的方法,以及限制执行时间的方法。不过适合我的用例:限制每秒发送的电子邮件。
有没有办法限制从假脱机程序发送的电子邮件的费率?
答案 0 :(得分:4)
使用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。每次失败都会重新运行。
扩展SpoolTransport显然是更明智的选择,尽管第二种解决方案通常会更加密集。
答案 1 :(得分:2)
现在,你可以使用配置防洪与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封电子邮件