我运行了 postfix 和 opendkim。postfix 通过 unix 套接字与 opendkim 通信。只要我不在 opendkim 应该签名的字段列表中添加一些特殊的邮件头字段,所有这一切都有效。
后缀配置:
主.cf:
...
smtpd_milters = unix:/var/spool/postfix/milter/opendkim
non_smtpd_milters = unix:/var/spool/postfix/milter/opendkim
...
在我的 opendkim.conf 中我有这个条目:
...
AlwaysSignHeaders To,Subject,MIME-Version,Content-Type,Sender,From,Message-Id,Date,Reply-To,List-Unsubscribe
...
如果我用这样的 postfix sendmail 命令发送电子邮件
sendmail -f [email protected] -i -t <<EOF
From: [email protected]
Sender: [email protected]
To: [email protected]
Subject: Test
Test
EOF
Gmail 会通知我:
dkim=hardfail
使用
Diagnostics true
opendkim.conf 中的条目它通过“z=...”调试邮件标头条目显示 opendkim 没有在签名中包含“Message-Id”和“Sender”字段,但报告包含
h=From:To:Subject:Date:MIME-Version:Content-Type:Sender:Reply-To:List-Unsubscribe;
邮件标题条目。
深入研究这一点后,我发现当我从 opendkim.conf 的“AlwaysSignHeaders”条目中删除 Message-Id 和 Sender 字段时,Gmail 又高兴了。
因为我使用 sendmail 命令发送邮件,所以我可以确定至少“发件人:”字段必须从一开始就对 postfix 和 opendkim 可用。
因此,如果 opendkim 将使用它获得的所有标头字段,这意味着 postfix 不会为 opendkim 提供所有标头字段。我试图通过为 postfix 的“清理”和“琐碎重写”过程打开详细日志记录来验证这一点,但我不得不承认我在日志中看不到任何有用的信息,尤其是我无法提取信息postfix 向 opendkim 提供了哪些邮件标头字段。如果有人可以使用它,我可以在这里发布这些日志......
我的想法用完了,所以我希望有人能给我一些有用的指示......
我找到了原因(在 opendkim 邮件列表的好心人的帮助下):
在我的 opendkim.conf 文件中,我只有这个字段
指定的。事实证明,您还需要添加 SignHeaders 字段,所以现在的配置如下所示:
而已。
编辑:
来自 opendkim 的人注意到AlwaysSignHeaders已被弃用,应该改用OversignHeaders 。
您是否尝试使用 Message-ID: 和 Sender: 标头对测试消息进行签名?
您的问题可能是由于 milter在posstfix/MTA 添加上述标头之前获取消息版本引起的(我相信任何好的 MTA 都会修复缺少 Message-Id: 标头)。
http://www.elandsys.com/resources/sendmail/dkim.html:DKIM使用电子邮件标头和正文生成签名。 如果重写标头或在签名后将文本附加到邮件正文,则 dkim 验证失败。
PS 恕我直言,opendkim 应该提供选项来生成自己丢失的消息 ID:
为未来的读者添加:OpenDKIM 提供了调试“标头已更改”问题的选项:
KeepTemporaryFiles
和TemporaryDirectory
http://www.opendkim.org/opendkim.conf.5.html