首先我要说的是,我知道 DMARC 和 SPF 不做同样的事情。
\n但是,两者都可以选择告诉接收服务器如何处理未通过 SPF 的邮件(如果是 DMARC,则为 DKIM)。
现在让\xe2\x80\x99s 有一个理论案例,其中 SPF 设置为v=spf1 include:\xe2\x80\xa6 ~all
(重要部分是~all
)并且 DMARC 设置为v=DMARC1; p=reject; rua=\xe2\x80\xa6
。
在这种情况下,如果我理解正确的话,我们有一个 SPF 记录告诉 \xe2\x80\x9cmark 邮件不会将 SPF 作为垃圾邮件\xe2\x80\x9d 传递,还有一个 DMARC 记录告诉 \xe2\x80\x9c 不要接受以下邮件:不通过 DKIM 或 SPF。\xe2\x80\x9d
\n当收到未通过 SPF 的邮件时,哪个指令优先?如果 DMARC 条目设置为p=none
,答案是否相同?
来自 RFC 7208:
“软失败”结果应该被视为介于“失败”和“中性”/“无”之间。ADMD认为东道主没有获得授权,但不愿意发表强硬的政策声明。接收软件不应仅根据此结果拒绝消息,但可以对消息进行比平常更严格的审查。
ADMD 希望阻止使用该主机,因此希望在发生“软故障”结果时得到有限的反馈。例如,收件人的 MUA 可以突出显示“软失败”状态,或者接收 MTA 可以使用灰名单 [RFC6647] 向发件人提供一条消息,并在第一次收到消息时附上注释,但在稍后尝试时接受它接收者政策。
这里的关键词是“不应该”,因此接收服务器可以强制执行其他策略并且仍然符合标准。
来自 RFC 7489:
拒绝: 域所有者希望邮件接收者拒绝未通过 DMARC 机制检查的电子邮件。拒绝应该发生在 SMTP 事务期间。
这里的关键短语是“希望”和“应该”,因此接收服务器可以强制执行其他策略,并在 SMTP 事务期间做任何他们想做的事情,同时仍然在策略范围内。
我最好的猜测是,如果接收者强制执行 DMARC,那么这p=reject
将是最重要的策略。
同样来自 RFC 7489 中的同一部分:
无:域所有者请求不对消息传递采取任何特定操作。
这里的关键词是“请求”。实际上,除了发送报告之外,这几乎总是被视为没有 DMARC 策略,因为该策略用于测试。
附带说明一下,您似乎对 DMARC 正在测试的内容存在常见的误解。DMARC 测试对齐,这不是 DKIM 或 SPF 正在测试的内容,因此这些测试都可以通过,而 DMARC 会失败。