余读

如何避免邮件被投递到垃圾邮件箱

在架设完邮件服务器后,如果不做进一步的处理,发出去的邮件很容易被识别为垃圾邮件。发往 gmail、outlook 等邮箱的邮件几乎 100% 会被扔到垃圾邮件箱,而国内的网易邮箱则相对宽容,在多次测试中都未被标识为垃圾邮件。
那么如何来避免邮件被误报为垃圾邮件呢?通常有以下两种方法来解决此问题:

  • 给域名设置 SPF 记录
  • 给域名添加 DKIM 记录

SPF(Sender Policy Framework)

SPF 叫做发件人策略框架,它诞生的原因是为了应对当今互联网日益泛滥的垃圾邮件。

SPF原理

SPF 是一个用于阻止发件人地址伪造(欺骗)的开放标准。当前版本叫做 SPFv1SPF Classic,它用于确保邮件的 信封发件人地址 的真实性。

通常,一封 email 会有两个发件人地址:标题发件人地址(header sender address)和信封发件人地址(envelope sender address)。这有点难以理解,因为 email 的寄送方式和我们日常生活中写信有所区别。在现实中写信,我们只需要在信封上写上收件人和发件人的地址。而写 email,表面上我们的操作好像类似,在 email 的头部写上收件人(To)和发件人(From)地址,就可以发出去了。但实际上这里有一个地址是我们看不到的,它叫 MAIL FROM,是由邮件客户端在发送邮件时和服务器协商决定的。这个 MAIL FROM 就是信封发件人地址。而写在 email 头部的 From 则是标题发件人地址。

更准确的说,SPF 允许域名的所有者设置规则来指定哪些邮件服务器可以在发送邮件时将 MAIL FROM 设置为你的域名。具体实现分两步走:

  1. 域名所有者在 DNS 解析记录表里添加一条 SPF 记录,指定谁可以代表自己发邮件。
  2. 当某个收件服务器收到一封自称是 MAIL FROM 你的域名的邮件时,它会去你的域名下查找是否有 SPF 记录,如果没有找到记录直接失败,如果有,则解析你设置的规则,检查实际发送该邮件的IP地址是否在你的规则内,是则 Pass,否则 Failed。

设置 SPF 记录

如果你熟悉 DNS 记录,你一定知道并没有 TYPE 为 SPF 的记录,实际上 SPF 记录以 TXT 记录的形式存在。
通常,如果发件服务器和收件服务器是同一个的话,只要按照下面这样设置就能正常开启 SPF 了。

NAME TYPE VALUE
example.com TXT v=spf1 mx -all

更多设置请查阅 SPF 官方文档的语法文档 SPF Record Syntax

验证 SPF 记录

由于 DNS 更新有一定延时,我们可以用一个小工具来SPF Record Testing Tools来检查我们的SPF记录是否已经生效,并且是否合法。

DKIM(DomainKeys Identified Mail)

基本上设置完 SPF 记录后,邮件就很少会被认为是垃圾邮件了,如果你想进一步提高邮件的送达率,我们可以考虑 DKIM。
DKIM 的原理很简单:

您可以使用 DKIM 标准向外发邮件标头添加数字签名,从而帮助防止欺骗。这包括使用网域私钥来加密您所在网域的外发邮件标头,以及在该网域的 DNS 记录中添加该密钥的公共版本。接收者服务器可以检索公共密钥以解密传入的标头,并验证邮件是否确实来自您的网域且中途未曾改变。

Google 使用 DKIM 对电子邮件进行身份验证

DKIM 的设置相对 SPF 来说相对复杂,不仅需要添加 DNS 记录,还需要对邮件服务器进行设置。感兴趣的童鞋可以参考邮件优化技巧 教你搭建满分的邮件服务器 (DKIM),亲测有效~


参考
Sender Policy Framework Introduction
Sender Policy Framework Related Solutions
What is the behavior difference between return-path, reply-to and from?