PHP 电子邮件、Postfix 和消息队列

PHP 电子邮件、Postfix 和消息队列

我一直在运行一个需要每天发送大量电子邮件的 Web 平台。在实施之日,我和我的合作伙伴决定在服务器上设置 Postfix,并使用 Swift Mailer 类通过 SMTP 连接将电子邮件发送到本地 Postfix 服务器。

这样,我们就可以拥有多个电子邮件帐户,例如[email protected],,并且能够发送使用 DKIM 正确签名的电子邮件。[email protected][email protected]

我的问题是,我们能否以某种方式配置 PHP 以避免本地 SMTP 连接(这会占用时间和服务器资源),而用更直接的方式来传递要发送到 Postfix 队列的消息?

据我所知,我可以使用 PHPmail()函数甚至 Swift Mailer 的Swift_SendmailTransport类并将消息直接发送到 Postfix 队列。但如果这样,我们如何确保 DKIM?将“FROM”标头更改为本地服务器上的电子邮件帐户是否足够?

谢谢。

答案1

据我所知,我可以使用 PHP mail() 函数甚至 Swift Mailer 的 Swift_SendmailTransport 类并将消息直接发送到 Postfix 队列。

这是真的

但如果是这样,我们如何确保 DKIM?将“FROM”标头更改为本地服务器上的电子邮件帐户是否足够?

你没有指定你的 DKIM 签名者,所以我假设你在设置中使用 OpenDKIM。OpenDKIM 通过以下方式与 postfix 集成米尔特接口. 要通过 mail() 命令(无需 smtp 程序)签署电子邮件,您需要确保 OpenDKIM 套接字/端口也列出non_smptd_milters

答案2

首先,只要您在 non_smptd_milters 中指定了 OpenDKIM,以及在 Postfix 的 main.cf 中指定了 smptd_milters,通过 PHP mail() 发送的外发邮件仍应被签名。默认情况下,Received 标头未签名,并且 cleanup 不应重写任何其他内容。如果您想要一种替代方法,您可以使用 Amavis 和 content_filter 进行 DKIM 签名,尽管这意味着更多的 SMTP 会话。

其次,我认为使用本地 SMTP 而不是将邮件放入 maildrop 队列不太可能带来如此大的性能开销。可能是因为您有数量有限的 postfix smtpd 守护进程,它们都在调用邮件过滤器,但即使没有这些,邮件在发送之前仍必须经过 OpenDKIM 邮件过滤器。是的,您的 PHP 脚本将更快完成,但我怀疑电子邮件是否会更快送达。可能值得重新阅读http://www.postfix.org/QSHAPE_README.html

相关内容