我的 Web 托管服务器已安装并运行 Postfix。该 Postfix 还在STARTTLS
端口 587 上开放,供授权用户(目前只有我、我自己和我)使用 DKIM 签名后向任何域发送电子邮件。
我通过 Outlook 发送的每封电子邮件都验证了我的身份,没有任何问题。所有 DMARC 报告均未显示任何错误。问题在于 Web 应用程序通过该 Postfix 发送电子邮件时。
由于我使用 Apache进行 PHP 托管,因此所有电子邮件都是通过标准方式(sendmail???)mod-itk
生成并提交给 Postfix。[email protected]
但这样一来它们就不是经过 DKIM 签名的了。请考虑以下情况:
$ mail [email protected]
Subject: Test DKIM
Hello
.
EOT
Port25 回复:
----------------------------------------------------------
DomainKeys check details:
----------------------------------------------------------
Result: neutral (message not signed)
ID(s) verified: [email protected]
DNS record(s):
----------------------------------------------------------
DKIM check details:
----------------------------------------------------------
Result: neutral (message not signed)
ID(s) verified:
Postfix 日志不显示dkimproxy
交互。
在发布我的配置之前,让我们重复一下情况并提出问题。
目前,当我通过端口 587 上的 SMTP/TLS 发送电子邮件时,它会获得 DKIM 签名。当服务器上的进程使用mail
命令或 PHP 内置邮件函数发送电子邮件时,邮件没有得到由 dkimproxy 签名。
问题是:如何使用 签署来自服务器本身的每封电子邮件dkimproxy
?
配置粘贴到http://pastebin.ca/2374363。请注意,我dkimproxy.out
目前只启用了
答案1
您仅将 dkim SIGNING 添加到提交端口。
Postfix 将 smtp 提交与 pickup 分开处理(通过 sendmail 命令提交的邮件通过 pickup 进入 postfix)
在 postfix 中你应该在 main.cf 中使用 dkim milter
smtpd_milters = inet:localhost:10027
non_smtpd_milters = inet:localhost:10027
第一行用于 SMTP 提交(端口 587)
第二行是通过取件进入的邮件
需要注意的是,Postfix 内部生成的退回邮件和 NDR 报告不会经过 DKIM 签名
答案2
默认情况下,Postfix 生成的邮件不会被 non_smtp_milters 处理。
要改变该行为,请设置以下变量,但请注意它还启用 header_cheks 和 body_checks:
internal_mail_filter_classes = bounce, notify
https://www.postfix.org/postconf.5.html#internal_mail_filter_classes https://www.postfix.org/MILTER_README.html