远程收件人域以 SPF 为由拒绝邮件,我认为这是因为发件人的 SPF 配置不正确。
当我运行 dig 时,我看到:
[fooadm@box ~]# dig @8.8.8.8 -t TXT foosender.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> @8.8.8.8 -t TXT foosender.com
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30608
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;foosender.com. IN TXT
;; ANSWER SECTION:
foosender.com. 14039 IN TXT "v=spf1 include:spf.foo1.com -all"
foosender.com. 14039 IN TXT "v=spf1 include:_spf.bob.foo2.com -all"
;; Query time: 26 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 7 09:45:38 2014
;; MSG SIZE rcvd: 146
这是有效的设置吗?我觉得有两个单独的记录(每个记录都有硬失败)很奇怪。难道所有内容不应该放在一个记录中吗?
我希望正确的 TXT 记录是:
v=spf1 include:spf.foo1.com include:_spf.bob.foo2.com -all
答案1
不,你说得对。看看RFC 4408,第 4.5 节。
不以版本部分“v=spf1”开头的记录将被丢弃。请注意,版本部分以 SP 字符或记录结尾结束。版本部分为“v=spf10”的记录不匹配,必须丢弃。
如果集合中存在任何 SPF 类型的记录,那么所有 TXT 类型的记录都会被丢弃。
经过上述步骤后,应该只剩下一条记录,评估就可以继续了。 如果剩余两个或更多记录,则 check_host() 将立即退出,结果为“PermError”。
如果没有返回匹配的记录,SPF 客户端必须假定该域未做出任何 SPF 声明。SPF 处理必须停止并
返回“无”。
答案2
此 SPF 设置无效。如果发现多条记录,记录选择应该会产生错误。请参阅RFC 7208,第 4.5 节选择记录时:
如果结果记录集包含多个记录,check_host() 将产生“permerror”结果。