如何提高 SwiftMailer DKIM Signer 的性能?
Posted
技术标签:
【中文标题】如何提高 SwiftMailer DKIM Signer 的性能?【英文标题】:How To Improve Performance of SwiftMailer DKIM Signer? 【发布时间】:2021-04-14 16:51:10 【问题描述】:我们每天早上都会向大型分发机构发送一份圣经每日灵修。我相信我们分发过程的速度受到与 Symfony/SwiftMailer 相关的 DKIM Signer 的限制。我们向每个电子邮件地址发送相同的两部分电子邮件(html 和纯文本)。每封电子邮件仅发送到一个具有唯一标头的电子邮件地址,以帮助处理退回邮件。
这是我们发送的每封电子邮件的处理流程:
新的\Swift_Message setSubject, setBody (html), addPart (纯文本), addTextHeaders attachSigner 用于 DKIM(标题/松弛、正文/简单) 发送如何优化此序列以减少处理时间?我知道 DKIM 处理是昂贵的。如果 DKIM 正文处理可以只进行一次就好了,因为每封电子邮件的正文都是相同的。由于标头从一封电子邮件更改为下一封,因此需要对每封电子邮件进行 DKIM 标头处理。
如果我将代码结构如下:
新的 \Swift 消息 setSubject、setBody (html)、addPart(纯文本) 为 DKIM 附加签名者 foreach 电子邮件地址 删除现有标题 添加文本标题 发送我知道这会提高性能,因为每封电子邮件执行的代码更少。 Swift 是否足够聪明,可以知道电子邮件正文的内容没有改变?不为每封电子邮件执行 DKIM 正文计算是否足够聪明?如果是这样,这将带来巨大的性能提升,有可能提高我们的电子邮件发送率。
【问题讨论】:
对于可通过symfony.com/community 访问的 Symfony Slack 频道来说可能是一个更好的问题 DKIM 签名的不仅仅是正文,签名中还包含许多标题。您的传出 SMTP 服务器应该进行签名。 【参考方案1】:问题在于 php 是单线程的。我将电子邮件分发列表分成两半,并创建了两个临时文件。然后我对这两个文件中的每一个运行 exec("... &") 。命令字符串末尾的“&”启动命令并立即返回。结果是两个任务同时发送一半的电子邮件分发。我可以使用 htop 看到两个任务同时运行。
这解决了我们的性能限制。
【讨论】:
以上是关于如何提高 SwiftMailer DKIM Signer 的性能?的主要内容,如果未能解决你的问题,请参考以下文章