我们有几个电子邮件服务器通过 PostFix 发送合法电子邮件并使用 openDKIM。
最近,一些收件人声称无法验证 DKIM 记录,因此我们尝试了各种工具,例如 mail-tester.com、isnotspam.com 等,结果相同,即一些电子邮件未通过 DKIM 检查,而其他电子邮件则通过。
同一台服务器可以发送一封带有 DKIM 通行证的电子邮件,也可以发送另一封电子邮件,但 DKIM 会失败。似乎电子邮件本身决定了 DKIM 是否会通过。我每次都可以用相同的电子邮件复制此操作。
我无法理解这种行为,想知道是否有人见过类似的问题。电子邮件本身怎么会导致 DKIM 失败?
答案1
首先,排除与实际签名无关的问题
- 检查 AR 标头:
Authentication-Results: host; dkim=fail
意味着签名失败,但Authentication-Results: host; dkim=permerror
可能只是意味着收件人无法获取您的密钥。 - 检查
Received:
与收件人无关的最顶层标题,如果不是您,则您正在查看转发的邮件。
然后确定是谁导致签名被破坏
获取提交邮件时的副本(例如存储在 IMAP 已发送文件夹中),获取收到原始邮件时的副本,然后逐字节进行比较。
如果收件人无法将完整的标头转发给您,您可以通过将其邮寄到同一提供商的您自己的邮箱来重现问题,以便您可以查看完整的标头。
a) 你在签名后修改了自己的邮件,导致签名无效
您是否发送了无效邮件,而您的邮件系统正在为您修复一些问题,例如添加丢失的
Date
邮件头?修复/替换不兼容的 MUA。您使用的某些用于发送垃圾邮件过滤的软件是否会修改您正在签名的标头?
确保邮件处理软件的顺序在任何此类修改之后将签名放在最后。
b) 收件人在验证您的签名之前修改了您的邮件,因此无法验证您的签名
我在野外见过的例子:
- 过长的线条已被重新折叠
- 发送前应用适当的折叠 - 尽管使用
relaxes
DKIM 规范化就足够了。
- 一些不区分大小写地接受收件人地址的软件(通常是 Microsoft)将收件人的字母大小写切换为规范格式
- 使用规范(通常是小写)拼写更新您的地址簿!
- 收件人邮件服务器以 UTF-8 编码接收的国际化域名 (IDN)
- 这应该是显而易见的,因为它只会发生在标头中某处的特定域中。以 idna 编码发送非 ASCII 域(
xn--..
)!
- 你签署了一个经常被收件人合法修改的标头
- 请勿对诸如
Received
或 之类的标题进行签名X-Spam-Status
!
请注意,如果您的邮件服务器无法应用建议的转换,您仍然可以拒绝您预计会失败的邮件 - 发件人可以尝试使用其他邮件客户端或收件人地址(或至少注意到有些错误)。