postfix + opendkim:签名中不包含“发件人:”和“消息 ID”字段

Mat*_*ias 5 postfix

我运行了 postfix 和 opendkim。postfix 通过 unix 套接字与 opendkim 通信。只要我不将一些特殊的邮件标题字段添加到 opendkim 应签名的字段列表中,所有这些都有效。

后缀配置:

主要.cf:

...
smtpd_milters = unix:/var/spool/postfix/milter/opendkim

non_smtpd_milters = unix:/var/spool/postfix/milter/opendkim
...
Run Code Online (Sandbox Code Playgroud)

在我的 opendkim.conf 我有这个条目:

...
AlwaysSignHeaders      To,Subject,MIME-Version,Content-Type,Sender,From,Message-Id,Date,Reply-To,List-Unsubscribe
...
Run Code Online (Sandbox Code Playgroud)

如果我像这样用 postfix sendmail 命令发送电子邮件

sendmail -f myenvelopefrom@mydomain.com -i -t <<EOF
From: me@mydomain.com
Sender: postmaster@mydomain.com
To: testaccount@gmail.com
Subject: Test

Test
EOF
Run Code Online (Sandbox Code Playgroud)

Gmail 会通知我:

dkim=hardfail
Run Code Online (Sandbox Code Playgroud)

使用

Diagnostics true
Run Code Online (Sandbox Code Playgroud)

opendkim.conf 中的条目它通过“z=...”调试邮件头条目显示,opendkim 没有在签名中包含“Message-Id”和“Sender”字段,但报告包含

h=From:To:Subject:Date:MIME-Version:Content-Type:Sender:Reply-To:List-Unsubscribe;
Run Code Online (Sandbox Code Playgroud)

邮件标题条目。

深入研究这一点,我发现当我从 opendkim.conf 中的“AlwaysSignHeaders”条目中删除 Message-Id 和 Sender 字段时,Gmail 再次感到高兴。

因为我使用 sendmail 命令发送邮件,所以我可以确定至少“发件人:”字段必须从一开始就对 postfix 和 opendkim 可用。

因此,如果 opendkim 将使用它获得的所有标头字段,那么这意味着 postfix 不会为 opendkim 提供所有标头字段。我试图通过为 postfix 的“清理”和“琐碎重写”过程打开详细日志记录来验证这一点,但我不得不承认我在日志中看不到任何有用的东西,尤其是我无法提取信息postfix 提供给 opendkim 的邮件头字段。如果有人可以使用它,我可以在此处发布这些日志...

我的想法不多了,所以我希望有人能给我一些有用的指点......

Mat*_*ias 7

我找到了原因(在 opendkim 邮件列表的好心人的帮助下):

在我的 opendkim.conf 文件中,我只有该字段

AlwaysSignHeaders       From,Sender,To,CC,Subject,Message-Id,Date
Run Code Online (Sandbox Code Playgroud)

指定的。原来你还需要添加 SignHeaders 字段,所以现在配置看起来像:

...
SignHeaders             From,Sender,To,CC,Subject,Message-Id,Date
AlwaysSignHeaders       From,Sender,To,CC,Subject,Message-Id,Date
...
Run Code Online (Sandbox Code Playgroud)

就是这样。

编辑:

opendkim 的人指出,AlwaysSignHeaders已被弃用,应改用OversignHeaders