在过去的三个月里,我一直在尝试从一家托管公司迁移到另一家,包括邮箱。两家托管公司都处于活跃状态,一家是我即将离开的,另一家是我最近订阅的(公司 1 和公司 2)。这种订阅重叠并不是故意的;我预计在 DNS 记录更改和传播时会出现短暂的停机时间。最多,我预计只会丢失几封收到的电子邮件。
我之所以在这里发布这篇文章,是因为公司 2 的技术服务似乎并没有认真对待这个问题,甚至建议我联系网络管理员,让他们将公司自己的 SMTP 服务器添加到他们的 SPF 记录中。我可能不太了解电子邮件路由,但这不是它应该做的事情。现在,在进一步讨论之前,公司 2 在过去 25 年里曾是一家备受尊敬的托管公司,而公司 1 满足更基本的需求(没有花哨的工具),但同样知识渊博。
如果措辞不准确,请原谅,英语不是我的第一语言,网络管理也不是我的专业。
我将尝试尽可能准确地进行说明。
- 这领域本身独立注册于注册员。虽然许多托管公司都愿意将域名转让给他们,但我希望它保持独立。过去,注册商是极少数具有严格隐私保护的注册商之一。
- 这DNS 区域位于公司 1因为我的 Nextcloud 还在那里。理由是,如果我无法在公司 2 中使用基本功能(电子邮件),那么我就没有理由留下来。
- 我有一封电子邮件我自己的域名下的地址在公司 2 (地址1)。同一地址也托管在公司 1通过在 DNS 区域中的 MX 记录中设置优先级,电子邮件只会发送到公司 2 邮箱。由于我仍未解决手头的问题,因此我不得不恢复此设置。
- 两家托管公司均SPF 和 DKIM 已激活,尽管在这种情况下我自己的 DNS 区域中的 SPF 记录在可传递性中不起任何作用。
- 我还有一个来自不同域名的地址(学术的) (地址2)。
- 学术地址是重定向到我的个人账户。
- 两家公司托管的两个邮箱均设置为使用地址 2 作为别名。
- 公司 1 使用单个 SMTP 服务器,公司 2 规模更大,使用一个 SMTP 服务器池(至少有十几个)。
我想要实现的目标:能够从单个邮箱(我的个人邮箱)发送电子邮件(即以别名发送电子邮件)。这是一种非常常见的设置,确实大大简化了日常电子邮件管理。这在公司 1 已经行之有效多年,在此之前在另一家托管公司,再之前在两三家免费电子邮件提供商也行之有效。
测试设置:
我做了什么: 我按照公司 2 的指示添加并验证了外部地址。我确实在我的个人邮箱中收到了验证电子邮件(根据地址 1 的重定向),并认为一切都很好。错了。
结果:
- 由于不清楚的原因,GMail 总是拒绝从地址 2 别名发送的消息,并出现“SPF 和 DKIM 550-5.7.26 均未通过”错误。
- 然后我尝试使用 Yahoo 别名。在同样的情况下,GMail 会抛出一个略有不同的错误“由于域的 550-5.7.26 DMARC 策略,来自 yahoo.com 的未经身份验证的电子邮件不被接受”。
- 相比之下,从地址 1(来自公司 1 或公司 2)直接发送的电子邮件总是会被送达。
我不明白为什么拒绝原因因别名而异,但继续测试这些记录。
测试 SPF
由于我不熟悉电子邮件传递的细节,DNSChecker用简单的英语解释了这一点:
SPF 记录确定哪些电子邮件服务器被授权代表域发送电子邮件(...)然后,接收服务器验证所有被授权代表域发送电子邮件的 IP 地址的 SPF 记录。
- 正在发送以公司 2 的名义给出了“SPF:中性”结果。
- 正在发送以公司 1 的名义给出了“SPF:通过”,明确地告诉接收服务器该电子邮件是有效的。
- 正在发送地址 1(非别名)来自公司 2,给出“SPF:通过”结果。
- 最后,发送使用公司 2 的地址 3 别名还给出了“SPF:中性”结果。
仅凭“中立”结果通常不足以阻止电子邮件。我理解地址 2 的域仅告诉接收 GMail 服务器,如果邮件通过公司 2 的 SMTP 服务器,则该邮件可能有效也可能无效。相反,公司 2 的 SMTP 服务器在同一个 SPF 记录中注册,允许代表自己的电子邮件地址发送邮件,但不能使用任何其他别名。相比之下,公司 1 的 SMTP 服务器在 SPF 记录中被视为有效,可以从其自己的地址以及来自其他域的经过身份验证的别名发送电子邮件。
第一个问题:为什么公司 2 的 SMTP 服务器没有注册为允许代表其他经过身份验证的电子邮件地址发送邮件?
测试 DKIM
据我了解,电子邮件会附上 DKIM 签名。此签名由公钥(在我的 DNS 区域中)和私钥(由托管公司保管)生成。由于我的 DNS 区域仍在公司 1,因此我有两个 DKIM 记录,每个记录都有不同的选择器。
- 正在发送以公司 2 的名义给出“DKIM:无”结果(无签名)
- 正在发送以公司 1 的名义给出“DKIM:pass”,表示该消息已正确签名并且有效。
- 正在发送地址 1(非别名)来自公司 2 的邮件给出“DKIM:通过”结果。
- 最后,发送使用公司 2 的地址 3 别名还给出“DKIM:无”。
我认为如果一方不签署其所属部分的消息,则不会生成签名。看来,如果公司 2 收到的电子邮件不是来自其自己的托管地址,则不会对其进行签名。
第二个问题:为什么公司 2 的 SMTP 服务器不使用自己的私人 DKIM 密钥签署消息?