使用DMARC的电子邮件:'FAIL',即使它来自https://mxtoolbox.com验证器

时间:2018-05-25 15:38:58

标签: spf dkim dmarc

我使用下面的username@example.net来保护隐私,但这发生在一个真实的域名和电子邮件地址。

在我们发送的群发电子邮件中,DMARC失败了:

enter image description here

在我的TXT记录中,这就是我对DMARC的看法:

_dmarc 14400 IN TXT "v=DMARC1; p=none; rua=mailto:username@example.net; sp=none; aspf=r"

当我在https://mxtoolbox.com验证我的DMARC记录时,这就是我得到的:

enter image description here

为什么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:username@example.net; sp=none; aspf=r"我如何尝试使用宽松模式。

3 个答案:

答案 0 :(得分:3)

我猜(因为我无法告诉您发布的内容)这是因为您的SPF发件人域未与您的From标头“对齐”。你是通过sendgrid发送的,所以我希望sendgrid也处理你的反弹,所以你可能在收到的消息上有一个返回路径标题,如:

Return-path: <bounces-username=example.net@sendgrid.net>

但您的From标头位于您自己的域中:

From: <username@example.net>

您的SPF可能会允许从sendgrid的IP发送(通过其SPF记录的include),因此您将获得该通行证,但显然example.netsendgrid.net是不是同一个域,所以它们不被认为是对齐的,你会得到DMARC失败。

要使它在aspf=s更多对齐,要么你的地址需要是sendgrid.net地址(可能不是你想要的),要么你的邮件服务器需要在example.net(你'可能使用sendgrid,因为你不想运行自己的邮件服务器),所以你需要恢复到aspf=r(放松)模式。这将允许您在DNS中创建指向域中名称的CNAME,例如sendgrid的邮件服务器上的mail.example.net,并且他们需要知道该安排已到位,以便他们可以使用该名称发送消息信封发件人,在宽松模式下,example.netmail.example.net被视为已对齐,您将获得DMARC PASS

mxtoolbox会给你一个通行证,因为你的DMARC记录在单独考虑时确实完全有效,但除非您发送的消息中的域实际上对齐,否则它仍然无效。

答案 1 :(得分:1)

已接受答案的附录,专门针对Sendgrid:

如果您在主用户帐户中正确设置了所有内容,则并不意味着子用户帐户可以发送并具有DMARC通行证。您必须将已验证的域分配给子用户

我已经验证了我的域,还设置了专用IP地址并配置了反向DNS。 IP地址已正确分配给子用户。我认为域验证对子用户也有效,因为SPF和DKIM通过了。但是事实证明,它们是通过发件人域sendgrid.com传递的,而不是我的自定义域。这就是DMARC失败的原因。

Sendgrid提供了在您首次设置验证域时将验证域分配给子用户的选项(这是“高级”选项;文档here)。如果该域已经过验证,则似乎无法通过“发件人身份验证”标签将其分配给子用户。

另一方面,“子用户管理”选项卡中似乎确实有一个位置。如果您编辑特定的子用户,则有一个“更改发送中”按钮;单击之后,您可以选择一个域。我还没有尝试过这种方法,但是看起来应该可以。上面链接的文档中没有提到它。

我认为以子用户身份登录时也可以验证域,但是我也没有尝试过。

我不知道您是否需要DMARC记录中的aspf=radkim=r才能起作用。我以防万一,但是在我看来,DKIM发件人域是我的自定义域,而不是子域,因此我认为这样就足够了。

答案 2 :(得分:0)

只需在DNS设置中添加一个txt记录,即可 _dmarc

“ v = DMARC1 \; p = none \; pct = 100 \; rua = mailto:serveradmin@mydomain.com \; ruf = mailto:serveradmin@mydomain.com”

注意:删除其他_dmarc记录

要测试您的结构是否正确,可以使用

$ dig +短文本_dmarc.mydomain.com 应该回来 码: “ v = DMARC1 \; p = none \; pct = 100 \; rua = mailto:serveradmin@mydomain.com \; ruf = mailto:serveradmin@mydomain.com”