配置 SPF 记录时提示 "permerror (too many DNS lookups)",邮件因此被拒收,如何解决?
SPF 协议(RFC 7208)规定,接收方在对发件域名做 SPF 校验时,整个评估过程的 DNS 查询次数不得超过 10 次。一旦超限,接收方将返回 permerror,导致正常邮件也被拒收。
诊断:使用 dig 工具检查当前 SPF 记录中的 include: 和 redirect= 机制数量。每出现一个 include:,通常引发一次额外的 DNS 查询。如果还嵌套了第三方邮件服务(如营销平台、客服系统)的 include 链,查询数会快速攀升。
解决方案一(推荐):合并 Include 机制。将多个第三方服务商的 IP 段汇总为自定义的 IP4/IP6 条目,替换掉各自的 include 语句。例如将 include:spf.serviceA.com include:spf.serviceB.com 替换为 ip4:203.0.113.0/24 ip4:198.51.100.0/24。
解决方案二:扁平化 IP 段。使用 SPF 扁平化工具(如 spf-tools)将 include 引用的所有子记录展开为具体的 IP 地址段,消除递归查询。但需注意后续第三方变更 IP 时需同步更新。
修改后务必用 SPF 验证工具(如 dmarcian SPF Survey)确认查询次数降至 10 次以内。
参考:RFC 7208 — Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, §4.6.4(DNS Lookup Limits)
