@邮件域名体检

Gmail · SMTP 550 5.7.30

Gmail 550 5.7.30:DKIM authentication failed

这条永久拒信表示该消息没有通过 DKIM。先从实际被拒邮件的签名中取得 d=s=,再检查对应公钥和签名链路。

先判断是没有签名还是签名失败

Google 的 5.7.30 文本说明 DKIM 没有通过,但 DNS 修复对象不能只靠可见发件地址猜测。打开同一发件系统产生的原始邮件头,找到 DKIM-Signature

  • d= 是签名域,决定公钥所属域。
  • s= 是 selector,与签名域组成 s._domainkey.d 查询名。
  • 若没有 DKIM-Signature,问题在发件平台没有签名或签名配置未启用,不是缺少某个随机 selector。

不要依次尝试 defaultgoogleselector1 等常见名称。selector 必须来自真实签名或发件服务商给出的配置值。

核对 selector 公钥

  1. 查询 s._domainkey.d 的 TXT 或服务商指定的 CNAME,确认委派最终可解析。
  2. 确认只有当前平台要求的有效公钥,版本为 v=DKIM1,且 p= 不是空值。
  3. 核对 DNS 中的公钥与发件平台当前私钥属于同一轮密钥;密钥轮换时检查旧 selector 是否过早删除。
  4. 确认长 TXT 记录的多个字符串片段能在 DNS 响应中正确拼接,没有引号、空格或复制截断。

公钥存在仍然 fail

公开记录存在只证明验证器能取到候选公钥。签名仍可能因私钥不匹配、签名时间或算法问题、签名字段错误,或邮件在签名后被网关改写而失败。页脚、主题、编码、换行和正文内容的变化都可能影响被签名数据。

应对比真实邮件头中的 Authentication-Results、完整 DKIM-Signature 和原始消息,并从同一路径发送一封新邮件验证。若同时有多条签名,要逐条匹配各自的 d=s=

不要复制别人的 DKIM 公钥,也不要把私钥放进 DNS。DNS 只发布公钥;签名私钥必须留在受控发件系统中。

工具边界

在体检中填写真实 selector 后,可以验证公开公钥、CNAME 委派和明显的记录问题。仅凭域名无法重放某封邮件的 DKIM 验证,也无法判断签名后是否被改写,因此扫描通过不等于该消息的 DKIM 一定通过。

官方来源