我正在尝试验证我们服务器发送的邮件。使用我们当前的 DNS 设置,从我们的服务器发送邮件会显示SPF 中性回复。
我尝试添加我的服务器的 IP 和域的组合。
v=spf1 a mx ipv4:XXX.XX.XXX.XX -all
v=spf1 include:mydomain.com -all
这两条记录均未显示任何变化,从服务器发送的所有邮件仍为“中立”。因此,我尝试合并所有现有 SPF 记录,如下所示:
v=spf1 a mx include:mydomain.com ipv4:XXX.XX.XXX.XX include:cmail1.com include:mail.zendesk.com -all
我再次尝试发送邮件,现在收到SPF 失败回复。
我在网上查找了很多资料,但还是不知道该如何修复 DNS 条目,这样才能让 SPF 记录通过。我不知道我是否需要额外的 CNAME、A、MX,或者我是否完全遗漏了某些内容。
我正在使用具有固定 IPv4 地址的 Plesk 服务器,并使用 CloudFlare 来管理我的 DNS 和名称服务器。
完整的失败响应如下所示:
SPF: FAIL with IP XXX.XX.XXX.XX
spf=fail (google.com: domain of [email protected] does not designate XXX.XX.XXX.XX as permitted sender) [email protected]
Received-SPF: fail (google.com: domain of [email protected] does not designate XXX.XX.XXX.XX as permitted sender) client-ip=XXX.XX.XXX.XX;
spf=fail (google.com: domain of [email protected] does not designate XXX.XX.XXX.XX as permitted sender) [email protected]
答案1
已修复。我花了很长时间与我的提供商沟通,但我们无法找出它无法正常工作的原因。
小心!我从一个网站复制了我的代码,该网站说要使用 ipv4,它应该是 ip4!(没有 v)
答案2
在修复单个语法错误时(ipv4
而不是ip4
) 似乎已经解决了您的问题,但这仍然不是您的 SPF 记录的唯一问题。这就是为什么阅读官方文档以了解问题始终是一个好主意。
第一个问题你已经通过反复试验找到了答案,但是RFC 7208 3.2来源明确地说明了这一点:您应该将单个主机名的 SPF 规则合并为单个
TXT
记录。域名不得具有多个记录,否则会导致授权检查选择多个记录。
你应该明白
include
机制确实如此:指定的领域是搜索匹配项,即查找更多 SPF 规则。您的include:mydomain.com
建议是尝试使用它作为a
机制。如果这是在mydomain.com. TXT
,它是一个试图包含自身的引用!您还应该检查所有其他
include
s,看看它们是否真的有 SPF 记录。您应该仅限include
现有记录。警告:如果域名没有有效的 SPF 记录,则结果为
永久性错误。有些邮件接收方会根据 而拒绝
PermError
。
如果您的
a
或mx
解析为相同的 IP 地址,那么ip4
它们是不必要的,应该被删除。仅列出一次服务器。最终,SPF 查找解析为 IP 地址。
如果服务器的 IP 很少变化,请考虑使用
ip4:x.x.x.x
(或ip6
) 表示法,以便收件人可以完全避免 DNS 查找。由于每个 SPF 记录的 DNS 查找限制为 10 次,因此对于较长的外发邮件服务器列表,最好指定 IP 地址或地址范围。通常,SPF 记录可以压缩为类似于
v=spf1 ip4:x.x.x.x -all
只有一个外发邮件服务器的情况。
阅读链接中有关 SPF 语法和常见错误的文章可以很好地了解整个主题。如果您也对其工作原理感兴趣,链接的 RFC 添加了所有技术细节。