DMARC是电子邮件转发的终结吗?

时间:2016-05-10 08:35:15

标签: email mailgun forwarding email-forwarding dmarc

我在很多域上使用了相当多的电子邮件转发功能,AOL的最新p =拒绝政策给我带来了一些问题,也引起了很多困惑。我对DMARC的理解是它基于DKIM&具有报告层的SPF。我知道SPF是一个转发问题,但只要SPF设置为〜所有软故障,那么这不是一个显示停止。我还认为DKIM可以毫无问题地通过转发,只要你没有太多问题。但是我发现,当他们降落在GMail时,由MailGun转发的某些来自AOL的电子邮件正在使DMARC失败。 MailGun说它是由于发件人/不匹配错误。任何人都可以详细说明电子邮件转发注定是因为DMARC占用还是MailGun没有正确转发?

4 个答案:

答案 0 :(得分:14)

我认为你遇到的问题不是转发,而是DKIM的调整。是的,SPF将失败,但DKIM应该通过,但DKIM对齐可能无法通过。 DMARC要求根据您的政策严格或放宽。您可以在此处详细了解路线:Identifier Alignments

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

由于这是一个问题,在工作中有一个名为“ARC”的新规范,其目的是解决这个问题,你可以在这里阅读:ARC Spec

答案 1 :(得分:6)

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

  

注意如果您将邮件转发到其他电子邮件地址,那么您应该   通过编辑禁用点击跟踪,打开跟踪和取消订阅   您在控制面板中的域设置。如果这些功能是   启用后,Mailgun之前会修改每条消息的内容   转发,使DKIM签名无效。如果消息来了   从域名发布DMARC政策(如Yahoo! Mail),   邮件将被转发目的地拒绝为垃圾邮件。

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

所以,我关闭了我用于接收邮件的主域上的所有功能,这解决了DMARC的弹跳问题。如果要使用任何这些功能,则需要为外发邮件设置子域。

答案 2 :(得分: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中看到它。

答案 3 :(得分:0)

就我而言,这只是由信誉良好的发件人提供的无效DKIM签名引起的,尽管转发人修改了邮件。

在两者之间没有转发器的情况下,SPF可能已经通过并允许电子邮件通过,但是鉴于SPF也不会通过此处(因为您不是经过身份验证的发送者),因此DMARC会告诉接收者进行以下操作:失败,然后您的转发器可能会收到错误,例如来自Gmail的错误:

  

5.7.1由于域的DMARC政策,不接受来自example.com的未经身份验证的电子邮件。
  如果这是一封合法邮件,请与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或directly with an API)。 / p>

  • 告诉域所有者,希望他们修复它。
    (尽管,如果他们还没有good luck convincing them,问题就在他们这边。)