为了保护隐私,我在下面使用[email protected],但这是在真实域和电子邮件地址中发生的。
在我们发送的大量电子邮件中,DMARC失败:
在我的TXT记录中,这是我为DMARC所拥有的:
_dmarc 14400 IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]; sp=none; aspf=r"
[当我去验证我在https://mxtoolbox.com的DMARC记录时,这是我得到的:
为什么即使验证器说它通过了,也没有语法错误并且一切看起来正确,为什么DMARC还是会失败?注意SPF和DKIM是如何传递的。由于我试图理解的某些原因,DMARC仅存在该问题。
更新1:我在https://support.google.com/a/answer/2466563?hl=en中找到了本段:
对齐方式是指将发件人记录与SPF和DKIM签名进行比较的精度,其中两个可能的值被放宽或严格。分别由“ r”和“ s”表示。简而言之,放宽允许部分匹配,例如给定域的子域,而严格则要求精确匹配。
在我的_dmarc 14400 IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]; sp=none; aspf=r"
中,请注意如何使用轻松模式。
我猜(因为我不能从您发布的内容中得知),这是因为您的SPF发送者域未与From头“对齐”。您正在通过sendgrid发送,所以我希望sendgrid也在处理您的退回邮件,因此您可能在收到的消息上有一个return-path标头,例如:
Return-path: <[email protected]>
但是您的From头位于您自己的域中:
From: <[email protected]>
您的SPF可能会允许通过sendgrid的IP发送(通过其SPF记录的include
),因此您会获得通过,但是example.net
和sendgrid.net
显然不是同一域,因此它们不被认为是一致的,您将获得DMARC错误。
要使其在aspf=s
中更多对齐,或者您的发件人地址必须是sendgrid.net地址(可能不是您想要的地址),或者您的邮件服务器必须是example.net(您可能正在使用sendgrid(因为您不想运行自己的邮件服务器),因此您需要恢复到aspf=r
(松弛)模式。这将允许您在DNS中创建一个CNAME,以指向您域中的名称,例如sendgrid邮件服务器上的mail.example.net
,并且他们需要知道这种安排已经到位,以便他们可以使用该信封发件人发送邮件,在放松模式下,example.net
和mail.example.net
被认为是对齐的,您将获得DMARC PASS
。
mxtoolbox会通过,因为如果单独考虑您的DMARC记录确实是完全有效的,但是除非您发送邮件上的域实际对齐,否则它仍然无法使用。
只需使用子域在您的DNS设置中添加txt记录_dmarc
"v=DMARC1\;p=none\;pct=100\;rua=mailto:[email protected]\;ruf=mailto:[email protected]"
注意:删除其他_dmarc
记录
要测试您是否可以使用适当的结构,请检查
$ dig +short txt _dmarc.mydomain.com
应该返回
"v=DMARC1\;p=none\;pct=100\;rua=mailto:[email protected]\;ruf=mailto:[email protected]"