DMARC是邮件转发的终结吗?

21
我在许多域名上使用了相当数量的电子邮件转发,但是AOL最新的p=reject策略给我带来了一些问题和混乱。我的理解是DMARC基于DKIM和SPF技术,并带有一个报告层。我知道SPF技术在转发时会出现问题,但只要将SPF设置为~all soft fail就不会成为阻碍。我也认为只要您不太修改标头,DKIM就可以通过转发而没有问题。但是,我发现MailGun 转发的某些来自AOL的电子邮件在到达Gmail时未能通过DMARC验证。MailGun表示这是由于发送者/来源不匹配错误导致的。请问是否应该放弃电子邮件转发,因为 DMARC 开始生效了?还是说MailGun才不是很好地处理邮件转发?
4个回答

16

我认为你遇到的问题不是转发,而是DKIM对齐。是的,SPF会失败,但是DKIM应该通过,但是DKIM对齐可能不会通过。根据您的策略,DMARC需要严格或宽松对齐。您可以在此处阅读更多有关对齐的信息:标识符对齐

有一些测试工具,比如向mailtest@unlocktheinbox.com发送电子邮件,将显示结果上的对齐情况,但这是付费功能。

由于这是个问题,现在正在制定一个名为“ARC”的新规范,其目的是解决这个问题。您可以在此处了解相关信息:ARC规范


非常感谢。到目前为止,我只收到了模糊的回复。这将深入到实质性问题。 - user2988743
如果我的回答正确地解决了你的问题,那么请标记它为正确答案。 - Henry
5
惊人的补丁叠加(SPF、DKIM,现在还有ARC)。 - niry
1
作为一个想要将 me@mydomain.com 邮箱可靠地转发到我的 @gmail.com 账户的用户,有没有任何方法可以在不需要发送者更改任何内容的情况下,使用任何转发方法/服务来实现这一点?目前 Mailgun 日志显示,由于 Gmail 表示“未经身份验证的电子邮件来自 [域名],由于域名的 DMARC 政策而不被接受”,因此会丢弃一些消息。 - philfreo
2
@philfreo 使用gmail的POP检索方法来获取来自me@mydomain.com的电子邮件,而不是将其转发。 - None

8

我向Mailgun支持团队询问了这个问题,但没有得到任何有用的答案。然而,解决方案实际上在他们的文档中:

注意:如果您将邮件转发到另一个电子邮件地址,则应通过编辑控制面板中的域设置来禁用点击跟踪、打开跟踪和退订功能。如果启用这些功能,则Mailgun在转发之前修改每个消息的内容,从而使DKIM签名无效。如果消息来自发布DMARC策略(如Yahoo!Mail)的域,则该消息将被转发目标拒绝为垃圾邮件。

https://documentation.mailgun.com/en/latest/user_manual.html#routes

所以,我关闭了主域名上的所有功能,该主域名用于接收邮件,这解决了DMARC的反弹问题。如果您想使用这些功能中的任何一个,您需要设置一个用于发送邮件的子域名。


这对我也起作用了,似乎是处理传入电子邮件的最佳解决方案! - Thorning
5
我从未启用过这些功能,但我仍然收到DMARC错误。 - user541686
这应该是被接受的答案。我之前启用了“打开”跟踪,但在AOL邮件服务器上失败了,但在GMAIL上成功了。禁用后也可以在AOL上工作。 - codelearner
2
我写了你引用的Mailgun文档部分!很高兴知道它对其他人有用 :-) 我仍然认为Mailgun应该自动完成这个过程。修复问题比记录它更好。 - Nicolas Grilly

1
如上所述,问题在于发送电子邮件的somedomain.com会使用DKIM(电子邮件内容的唯一哈希值)对电子邮件加盖戳记。当Mailgun将该消息转发到Gmail时,它会插入其打开/点击/退订修改,这将使DKIM哈希无效。
因为somedomain.com DMARC规则是“拒绝任何已使DKIM失效的邮件”,所以Gmail或其他服务将拒绝该邮件。
我找到的解决方法是使用本地邮箱解决方案。WhoIs提供了一个易于设置的示例:https://manage.whois.com/kb/servlet/KBServlet/faq579.html 之后,我只需在Gmail的设置中添加POP邮箱即可(截至2017年12月24日)。我能够重新启用打开和点击跟踪,现在一切都正常工作,我仍然可以在Gmail中愉快地收到我的邮件。
作为奖励,我们使用电子邮件作为共享收件箱,因此每个人都可以在他们的收件箱中看到已发送的电子邮件,而不仅仅是转发的回复。
[编辑] 在这样做之后,我意识到我现在只能在本地邮箱解决方案中获取我的邮件,但在我也需要的Mailgun中却不能再获取邮件了。
为了解决这个问题,我添加了MX记录指向mxa.mailgun.org使用一个子域名mg.exampledomain.com。然后我在WhoIs中使用转发规则,将所有发送到info@exampledomain.com的电子邮件也发送到info@mg.exampledomain.com。现在我可以在Mailgun中收到邮件,并且仍然可以通过POP邮箱在Gmail中查看它们。

0

在我的情况下,这似乎只是由于来自信誉良好的发件人的无效DKIM签名,尽管转发器没有修改消息。

如果没有中间转发器,SPF可能已经通过并允许电子邮件通过,但由于SPF也不会通过(因为您不是经过身份验证的发件人),DMARC告诉接收者进行硬拒绝,然后您的转发器可能会收到错误,例如来自Gmail的以下错误:

5.7.1 来自example.com的未经身份验证的电子邮件由于域的DMARC策略而不被接受。
如果这是合法邮件,请联系example.com域的管理员。
请访问https://support.google.com/mail/answer/2451690了解DMARC计划。
- gsmtp

关键短语在于未经身份验证的电子邮件,意味着没有有效签名的电子邮件。另一方面,经过身份验证的电子邮件可以从您的域中允许通过。

您可以按照以下步骤验证问题是否为无效的DKIM签名:
$ pip install dkimpy  # dkimpy supercedes pydkim
$ dkimpy -v < message.eml
Traceback (most recent call last):
  File "/usr/sbin/dkimverify", line 10, in <module>
    sys.exit(main())
  File "/usr/lib/python/site-packages/dkim/dkimverify.py", line 41, in main
    res = d.verify()
  File "/usr/lib/python/site-packages/dkim/__init__.py", line 869, in verify
    return self.verify_sig(sig, include_headers, sigheaders[idx], dnsfunc)
  File "/usr/lib/python/site-packages/dkim/__init__.py", line 696, in verify_sig
    (base64.b64encode(bodyhash), sig[b'bh']))
dkim.ValidationError: body hash mismatch (got b'...', expected b'...')

不幸的是,如果发生这种情况,您自己没有太多好的选择:

  • 从您自己的域名发送单独的投递失败消息,并将原始电子邮件作为附件包含在内。如果您做得正确,Gmail(以及可能的其他接收方)实际上可以将附件显示为转发的消息。

  • 用您自己的地址替换“发件人”地址,然后使用您自己的DKIM密钥进行签名。
    也许包括原始电子邮件作为附件,以便接收者知道它是什么。

  • 如果接收者是您自己,则编写一个脚本来下载电子邮件并将其直接推送到您的收件箱中(例如,通过IMAP或直接使用API)。

  • 告诉域所有者并希望他们解决问题。
    (尽管,如果他们还没有这样做,祝你好运说服他们问题出在他们这边。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接