
我一直在運行一個網路平台,每天需要發送大量電子郵件。在實施日期,我和我的合作夥伴決定在伺服器上設定 Postfix 並使用 Swift Mailer 類別透過 SMTP 連接將電子郵件傳送到本地 Postfix 伺服器。
這使我們能夠擁有多個電子郵件帳戶,例如[email protected]
、[email protected]
,[email protected]
並且能夠發送使用 DKIM 正確簽署的電子郵件。
我的問題是,我們不能以某種方式配置 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以及Postfix的main.cf中的smptd_milters中指定了OpenDKIM,透過PHP mail()發送的外發郵件仍然應該被簽署。預設情況下,接收的標頭未簽名,且清理過程中不應重寫任何其他內容。如果您想要替代方法,您可以使用 Amavis 和 content_filter 進行 DKIM 簽名,儘管這意味著更多的 SMTP 會話。
其次,在我看來,使用本機 SMTP 而不是將郵件放入 maildrop 佇列會產生如此大的效能開銷,這聽起來不太可能。可能是您的 postfix smtpd 守護程序數量有限,所有這些守護程序都在調用 milter,但即使沒有這些,郵件在發送出去之前仍然必須經過 OpenDKIM milter。是的,您的 PHP 腳本會更快完成,但我懷疑電子郵件是否會更快發送。可能值得重新閱讀http://www.postfix.org/QSHAPE_README.html