邮件服务器:为什么困难以及需要考虑什么
为什么外发邮件端口是关闭的以及如何打开,需要配置什么才能让邮件送达——PTR、SPF、DKIM、DMARC——以及什么时候不该自建邮件服务器。
更新于 2026年8月23日
搭建邮件服务器在技术上并不困难——难的是让邮件进入“收件箱”而不是垃圾邮件,并避免静默退信。本文介绍在发送第一封邮件之前需要完成的事项。
为什么这是一项独立的任务
接收邮件几乎可以立即工作:您搭建好服务器,开放 25 端口,邮件就会送达。问题出在发送上,它包含两个部分。第一,在我们的平台上,外发邮件端口默认关闭,需要申请后才能开放。第二,接收方(Gmail、Mail.ru、Yandex)会从多个维度检查发件人,任何一项不达标都会让邮件变成垃圾邮件或被拒收。
至少会检查以下内容:
| 检查项 | 配置位置 | 缺少时会怎样 |
|---|---|---|
| 外发 25 端口是否开放 | 提交工单申请 | 邮件完全发不出去 |
| 反向 DNS(PTR) | 机器面板的“访问”标签页 | 在连接阶段被拒收 |
| SPF | 域名 DNS | 邮件进入垃圾邮件 |
| DKIM | 域名 DNS + 邮件服务器 | 邮件进入垃圾邮件 |
| DMARC | 域名 DNS | 域名容易被伪造 |
| IP 信誉 | 发送历史 | 被静默过滤 |
配置顺序
- 申请外发端口。 25、465、587 端口在外发方向默认关闭,需要您申请后才会开放。请从这里开始:否则就无法测试后续内容,具体如下所述。
- PTR。 反向 DNS 记录必须与服务器在 SMTP 中声明的名称一致。在机器面板的“访问”标签页中设置,例如
mail.example.com,并创建一条指向该机器地址的同名正向 A 记录。 - 邮件套件。 最省事的方式是使用现成的容器化方案——docker-mailserver 或 Mailcow。它通过 Docker Compose 安装,会自动拉起 Postfix、Dovecot、反垃圾模块和 DKIM 密钥。
- DNS。 为服务器名称创建 MX 记录,然后配置 SPF 和 DMARC:
example.com. MX 10 mail.example.com.
example.com. TXT "v=spf1 mx -all"
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com"
- DKIM。 邮件服务器生成密钥;您将公钥部分以 TXT 记录的形式发布为
<selector>._domainkey.example.com。 - 验证。 向测试服务(mail-tester、learndmarc)发送一封邮件,争取拿到满分。在此之前不要发送任何群发邮件。
外发邮件端口默认关闭
这是安装邮件服务器之前最需要了解的一点。机器向外发往 25、465、587 端口的流量在宿主机上被封锁。新机器无法对外发送邮件,也不会因为系统内部的任何设置而变得可用:数据包根本不会离开它的网络接口。
可以这样检查——连接不会建立:
nc -vz smtp.gmail.com 25
这样做是因为被入侵的机器会最先开始发送垃圾邮件,而宿主机上的所有邻居都要为这个地址及其信誉买单。这不影响接收邮件:发往 25、465、587、993 端口的入站连接不会被封锁,邮件服务器可以立即接收邮件。
如何开放
端口需要申请后人工开放,并非即时生效。面板中没有对应的按钮。
- 联系客服,并提供机器编号(“付款”标签页中的“联系客服”区块)。
- 说明您要发送的内容:域名、邮件性质、大致每日发送量。
- 等待回复。在端口关闭期间,您可以安装和配置邮件服务器——但无法测试发送。
无论给出什么理由,都不会为向购买的数据库群发邮件开放端口;请参阅在机器上可以做和不可以做的事。
如果您需要当天就能发送,而不是来回沟通之后再发,请使用外部中继:邮件服务商会提供 SMTP 登录信息,并通过 2525 端口或 API 接受连接,无需 25 端口。
机器内部的防火墙
在您这一侧,允许入站连接到邮件端口:
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 465/tcp
sudo ufw allow 993/tcp
ufw 规则只控制进入您系统的流量。对外发 25、465、587 端口的封锁来自外部,ufw allow out 无法解除它。
绝不要留下开放中继。检查方法:从另一台机器执行
swaks --to test@example.com --server <machine-address>且不进行身份验证——连接应当被拒绝。开放中继会在一天之内让机器地址变成垃圾邮件来源,并永久毁掉它的信誉。
什么时候不需要自己的邮件服务器
- 您只需要从应用发送通知——请使用外部发送服务。它更便宜,送达率也更好。通过 HTTP API 或 2525 等替代端口连接:标准端口 465 和 587 与 25 一样是关闭的。
- 您需要的是供人使用的域名邮箱——邮件托管无需您参与即可解决问题。
- 您还没准备好监控更新和队列——被弃置的邮件服务器会变成安全漏洞。
当独立性很重要且您愿意维护时,自己的服务器才是合理选择:备份邮箱是必须的,并且需要为邮件预留足够的磁盘空间——请参阅磁盘空间。