如何提高 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 的性能?的主要内容,如果未能解决你的问题,请参考以下文章

使用 DKIM 密钥在 phpmailer 中发送邮件

使用 Swiftmailer 时如何设置回复

如何在 SwiftMailer 中关闭 SMTP 连接

将 DKIM 与 SMTP TELNET 连接一起使用

Swiftmailer 的多个附件

Yii2中如何使用swiftMailer