DKIM仅适用于短消息。

4
问题:
我正在使用Postfix和OpenDKIM。邮件是使用以下代码在PHP中生成,然后使用mail()发送:
// message
$message  = "--$hash".PHP_EOL;
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"".PHP_EOL;
$message .= "Content-Transfer-Encoding: base64".PHP_EOL.PHP_EOL;
$message .= base64_encode($body).PHP_EOL.PHP_EOL;
$message .= "--$hash".PHP_EOL;

OpenDKIM对于长度小于742个字符的邮件可以正常工作,但是如果消息长度达到或超过742个字符,谷歌会报告DKIM“body hash did not verify”。

在研究DKIM和Google时,我没有找到任何有关这种情况的信息。我尝试了多个长度为741个字符的消息(全部通过),以及多个长度为742个字符的消息(全部失败)。


错误:

唯一的错误出现在谷歌收到邮件时(它说无法验证):

dkim=neutral (body hash did not verify) header.i=@mailer.example.com;

/var/log/maillog文件记录了电子邮件发送成功或失败的信息,格式如下:

Nov  5 00:58:57 ip-XX-XX-XX-XX opendkim[3953]: 7D2946081A: DKIM-Signature field added (s=default, d=mailer.example.com)

解决方案:

根据 @Adrien Lebner 的解决方案,只需要进行一个简单的更改,从

base64_encode($body)

to

chunk_split(base64_encode($body), 76, PHP_EOL)

解决了问题。

有任何错误信息吗? - JazZ
你能添加 mail._domainkey TXT DNS 区域的内容吗?(在你的答案中编辑附加信息会更清晰) - JazZ
@AdrienLeber 已添加并组织好。 - Kittsil
可以发布完整的邮件吗? - JazZ
1个回答

3

如果您在多行上发送相同的内容,会怎样?

如果行长过长,DKIM可能会出现故障:

2.1.1. 行长限制

该规范对一行中字符数量有两个限制。每行字符数必须不超过998个,建议不超过78个(不包括回车换行符)。


这几乎肯定是的。邮件是以base64编码方式进行编码,因此被发送为一行。谢谢! - Kittsil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接