2

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

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

在此处输入图像描述

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

_dmarc 14400 IN TXT "v=DMARC1; p=none; rua=mailto:username@example.net; 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”表示。简而言之,relaxed 允许部分匹配,例如给定域的子域,而 strict 需要完全匹配。

请注意我_dmarc 14400 IN TXT "v=DMARC1; p=none; rua=mailto:username@example.net; sp=none; aspf=r"是如何尝试使用轻松模式的。

4

3 回答 3

9

我猜(因为我无法从您发布的内容中看出)这​​是因为您的 SPF 发件人域未与您的 From 标头“对齐”。您正在通过 sendgrid 发送,所以我希望 sendgrid 也在处理您的退回邮件,因此您可能在收到的消息上有一个返回路径标头,例如:

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

但是您的 From 标头在您自己的域中:

From: <username@example.net>

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

为了使其更加一致aspf=s,您的发件人地址需要是 sendgrid.net 地址(可能不是您想要的),或者您的邮件服务器需要位于 example.net(您可能正在使用 sendgrid,因为您没有t 想要运行自己的邮件服务器),因此您需要恢复到aspf=r(放松)模式。这将允许您在您的 DNS 中创建一个指向您域中的名称的 CNAME,例如mail.example.net在 sendgrid 的邮件服务器上,并且他们需要知道安排已经到位,以便他们可以使用该信封发件人发送消息,并且在放松模式,example.net并且mail.example.net被认为是对齐的,你会得到一个 DMARC PASS

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

于 2018-05-28T12:52:17.377 回答
1

已接受答案的附录,特别是针对 Sendgrid:

如果您在主用户帐户中正确设置了所有内容,这并不意味着子用户帐户能够发送并获得 DMARC 通行证。您必须将经过验证的域分配给子用户

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

当您第一次设置验证域时,Sendgrid 提供了将验证域分配给子用户的选项(这是一个“高级”选项;文档在此处)。如果域已经过验证,似乎没有办法从“发件人身份验证”选项卡将其分配给子用户。

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

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

我不知道您是否需要aspf=radkim=r在您的 DMARC 记录中才能使其正常工作。我有它们以防万一,但在我看来,DKIM 发件人域是我的自定义域,而不是子域,所以我认为这已经足够了。

于 2020-08-05T20:18:57.607 回答
-2

只需使用子域在 DNS 设置中添加 txt 记录 _dmarc

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

注意:删除其他_dmarc记录

为了测试你有正确的结构,你可以检查

$ dig +short txt _dmarc.mydomain.com 

应该返回

"v=DMARC1\;p=none\;pct=100\;rua=mailto:serveradmin@mydomain.com\;ruf=mailto:serveradmin@mydomain.com"
于 2019-02-23T06:31:03.007 回答