![DKIM 有效,但 Outlook/Hotmail/Live 上出现“正文哈希未验证”错误?](https://linux22.com/image/733176/DKIM%20%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%20Outlook%2FHotmail%2FLive%20%E4%B8%8A%E5%87%BA%E7%8E%B0%E2%80%9C%E6%AD%A3%E6%96%87%E5%93%88%E5%B8%8C%E6%9C%AA%E9%AA%8C%E8%AF%81%E2%80%9D%E9%94%99%E8%AF%AF%EF%BC%9F.png)
当我已设置有效的 DKIM 时,为什么 Outlook/Hotmail/Live 上仍会出现 dkim=fail(正文哈希未验证)?
我已确保我的 SPF、DKIM、DMARC 记录设置正确,并且我域上的 DKIM 记录与我的服务器的 DKIM 密钥匹配。
当我从我的域名向 Google 等发送电子邮件时,我得到 SPF = Pass、DKIM = Pass、DMARC = Pass,并且是通过安全连接。一切顺利。
当使用相同配置发送到 Outlook.com 时,我收到错误:dkim=fail(主体哈希未验证)。为什么?
有人知道这是为什么吗?
我在 Debian 9 上使用带有 SpamAssassin 的 Postfix。
我的 DNS 记录很旧,这不是因为 DNS 传播。
我使用 Thunderbird 作为客户端发送电子邮件。
答案1
对我们来说,这是特殊字符的问题。比较 Gmail 中的源代码或“原始”电子邮件与 Hotmail 中相同电子邮件的源代码,您会发现导致 DKIM 失败的原因。对我们来说,这是和字符--
('
用单词而不是数字编码)。如果它以 HTML 编码,那就没问题,但如果将其添加为文本,然后粘贴到 HTML 中,那就不行了。
微软无法识别它们、应用规范化并删除它们,这导致正文哈希无法验证。
答案2
我正在使用 PHPMailer,也遇到了同样的问题,我的 DKIM 密钥在测试中可用,但在生产中却开始失效。原来,我的生产代码在输入的 $body 变量末尾插入了一个空格,$mail-> Body = $body
这导致了我的body hash did not verify
错误。