成功发送和投递邮件验证清单
后续检查需要以下软件:
-
host 工具
- Debian/Ubuntu:
apt-get install bind9-host - CentOS:
yum install bind9-host
- Debian/Ubuntu:
-
Telnet 工具
- Debian/Ubuntu:
apt-get install telnet - CentOS:
yum install telnet
- Debian/Ubuntu:
MX 记录
MX 记录是一种 DNS 记录类型,用于登记使用 SMTP 协议的邮件服务器。 此记录用于确定发件人的邮件代理应将电子邮件投递到哪台服务器。 一个域名上可以有多个不同优先级的此类记录。
您可以使用 host 命令检查邮件是在本地工作还是使用第三方邮件服务器:
host -t MX example.com
使用本地邮件服务器时,输出将如下所示:
example.com 的邮件由 10 mail.example.com 处理。
值得一提的是,mail.example.com 记录也可以指向另一台服务器。 此外还需要注意,mail.example.com 必须是一个现有的 A 记录,并指向您发送邮件所使用的服务器。
您还可以运行以下命令进行检查:
host example.com
host mail.example.com
并比较主域名(在本例中为 example.com)和 mail.example.com 所指向的 IP 地址。
必须设置 MX 记录,这样邮件服务器才能接收您的电子邮件。
MX 记录示例:
名称:example.com。
类型:MX
值:mail.example.com。
优先级:10
DKIM 签名
借助 FASTPANEL®,可以在 management menu → “Mail” 部分中,点击所需邮件域名前面的“DKIM”来获取 DKIM 签名

在 DNS 侧,需要按如下方式添加记录:
名称:dkim._domainkey
类型:TXT
值:v=DKIM1; k=rsa; p=public_key
以下是正确 DKIM 记录的示例
dkim._domainkey TXT v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpbBQ0T2xO3/SwziunIC/IFbsxBRub6WXiu8Kc2w7uB4GVw+SAB5wSEslDJbFXQRbdV9i/Duu8EQ9xik8dbqdLVyP4iAtw34g4j6QWKcfocgK4hEkwlPFff1dzUlNQONh2riNE5KVJXuWcizm8hub7nPnl36e7OnxiL0qIU7tT1QIDAQAB
有关 DKIM 的更多信息,请参见 https://wikipedia.org/wiki/DomainKeys_Identified_Mail
SPF 记录
可以通过执行 host 命令检查 SPF 记录是否存在。 在这种情况下,命令如下所示:
host -t TXT example.com
输出类似于:
example.com 描述性文本 "v=spf1 ip4:ipv4_of_your_server ip6:ipv6_of_your_server a mx ~all"
请注意,此记录中可能没有 ipv6。 在这种情况下,SPF 签名将如下所示:
example.com 描述性文本 "v=spf1 ip4:ipv4_of_your_server a mx ~all"
需要指出的是,只能有一条 SPF 记录
在 DNS 侧,应按如下方式添加记录:
名称:example.com。
类型:TXT
值:
v=spf1 ip4:ipv4_of_your_server ip6:ipv6_of_your_server a mx ~all
或(如果未使用 ipv6)
v=spf1 ip4:ipv4_of_your_server a mx ~all
例如:
example.com TXT v=spf1 ip4:1.2.3.4 a mx ~all
有关 SPF 的更多信息,请参见 https://wikipedia.org/wiki/Sender_Policy_Framework
DMARC 记录
在大多数情况下,DMARC 记录值都是相同的。
在 DNS 侧,需要按如下方式添加记录:
名称:_dmarc
类型:TXT
值:v=DMARC1; p=none
例如:
_dmarc.example.com。 TXT v=DMARC1; p=none
有关 DMARC 的更多信息,请参见 https://wikipedia.org/wiki/DMARC
PTR 记录和服务器主机名
PTR 记录是一种反向 DNS 记录,可将 IP 地址转换为名称。 对于邮件服务器来说,此记录的主要目的是过滤大部分垃圾邮件。 此记录可用于确定电子邮件来自哪台主机。 通常,PTR 记录包含服务器上使用的域名。
PTR 记录将 ip 地址与主机名关联。 如果 PTR 记录配置不正确,您的邮件将被拒收,无法送达收件人。
主机名应设置为实际指向该服务器的域名,而 PTR 应指向该域名,而该域名又指向该服务器。
例如,您的服务器上有一个域名 example.com。
运行以下命令:
host example.com
您可以得到如下输出:
example.com 的地址为 1.2.3.4
example.com 的邮件由 10 mail.example.com 处理。
为避免可能出现的问题,建议将主机名和 PTR 记录设置为一个现有的二级子域名,例如 mail.example.com
SMTP 端口可用性
一些托管服务提供商会关闭用于发送或接收邮件的端口。 邮件服务使用的端口可能包括 25、587、465、143 和 993。
检查这些端口可用性最简单的方法之一是使用 telnet 命令。
检查来自第三方服务器的传入连接
运行以下命令:
telnet ip_adress port
例如,如果您尝试通过 telnet 连接到 1.2.3.4 的 25 端口,则应执行的命令是:
telnet 1.2.3.4 25
如果连接成功,您将看到类似如下的输出:
正在尝试 1.2.3.4……
已连接到 1.2.3.4。
转义字符是 '^]'。
如果连接失败,输出将如下所示:
正在连接到 1.2.3.4 ……
无法打开到主机的 some_port 端口的连接:连接失败
或者:
telnet: 无法连接到远程主机:连接超时
检查传出连接
在您的服务器上,运行以下命令:
telnet smtp.gmail.com 25
如果连接成功,您将看到类似如下的输出:
正在尝试 2a00:1450:4010:c0b::6c……
已连接到 smtp.gmail.com。
转义字符是 '^]'。
220 smtp.gmail.com ESMTP j6-20020ac25506000000b004b53eb60e3csm1066162lfk.256 - gsmtp
请注意,如果您使用云托管并为 SMTP 服务器使用 25 端口,那么托管服务提供商很可能默认阻止了 25 端口上的传出连接。 下面您可以看到有关如何解决此问题的说明链接:
- AWS:如何从我的 Amazon EC2 实例或 AWS Lambda 函数中移除 25 端口限制?
- Azure:排查 Azure 中的出站 SMTP 连接问题
- GCP:从实例发送电子邮件
- DigitalOcean:为什么 SMTP 被阻止?
除了托管服务提供商的端口阻止外,您还需要检查服务器上的端口是否被关闭。 让我们以使用 FASTPANEL 控制面板时作为防火墙的 iptables 为例。 检查特定端口(在本例中为 25)是否存在规则的命令如下:
iptables-save | grep 25
如果您要检查的端口没有对应规则,则不会返回任何信息。 如果您看到存在阻止邮件服务端口的规则,则需要使用以下命令删除该规则:
iptables -D rule chain
例如,您运行了一条命令并发现如下内容:
iptables-save | grep 25
-A INPUT -p tcp -m tcp --dport 25 -j DROP
这条规则不允许通过 25 端口对您的服务器进行任何访问,这将阻止邮件收发
要删除该规则,请使用以下命令:
iptables -D INPUT -p tcp -m tcp --dport 25 -j DROP
此命令示例可让您检查用于邮件服务的每个端口