![](/img/trans.png)
[英]Symfony2 SwiftMailer - How to send emails without waiting for the server response
[英]Limit swiftmailer emails per second in symfony2
我正在設置SES以使用SMTP2。 SES帳戶的限制之一(默認為至少)是每秒5封電子郵件。
我想要設置一個后台處理程序,如本文所述 。 我可以每分鍾使用cron觸發它,這對我來說很好。 不過,我擔心的是,此假脫機程序中將有大量電子郵件排隊,而我的服務器將嘗試一次發送所有電子郵件。
本文列出了一種方法,用於限制每次執行發送的電子郵件總數,以及限制執行時間的方法。 但是都不適合我的用例:限制每秒發送的電子郵件。
有什么方法可以限制假脫機程序發送電子郵件的速率?
使用Throttler插件/ fairly /很簡單。
我將使用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顯然是比較明智的選擇,盡管通常要跟蹤第二個分辨率會更高。
現在,您可以在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封電子郵件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.