
搭建 VPS(虚拟专用服务器)邮件服务器,很多人一开始只关注“能不能发出去”,真正上线后才发现问题在“能不能稳定送达收件箱”。这篇指南会帮助你把 Postfix、Dovecot、SPF、DKIM 与 DMARC 串起来,解决从系统准备、收发配置到投递验证的关键环节。我们不把它写成一份复制命令就结束的清单,而是按“为什么这样配、如何验证、出错看哪里”的顺序展开,方便你在自己的业务域名上复用。
先判断是否适合自建邮件服务器
自建邮件服务适合对域名、日志、队列和认证策略有控制需求的团队,比如需要为业务系统发送订单提醒、为内部成员提供少量邮箱,或希望把发送日志保留在自己的 VPS(虚拟专用服务器)环境中。但它并不适合所有场景:如果你每天要发送数万封营销邮件,或者没有时间处理黑名单、退信和 IP 声誉,使用专门的邮件服务会更省心。
如果你正在为网站或业务系统挑选基础环境,可以先了解 VPS 主机 的资源隔离方式,再结合 服务器配置 类文章评估 CPU、内存和磁盘 I/O。邮件服务不一定吃大量算力,但对稳定网络、固定公网 IP、反向解析和长期可维护性要求较高,这些因素会直接影响投递率。
准备域名、主机名和基础安全配置
邮件系统最怕“身份不一致”。你需要先确定一个邮件主机名,例如 mail.example.com,并让它和服务器公网 IP、反向解析、TLS 证书保持一致。很多投递失败不是 Postfix 本身出错,而是收件方看到 HELO 主机名、PTR 反向解析和 SPF 授权范围对不上,于是把邮件放进垃圾箱或直接拒收。
建议上线前完成这几项基础准备:
- 主机名:系统 hostname 使用
mail.example.com,Postfix 的myhostname与它保持一致。 - 防火墙:开放 25、587、993 端口;25 用于服务器间投递,587 用于客户端提交,993 用于 IMAP over SSL(安全传输协议)。
- PTR:向服务商申请把公网 IP 反向解析到
mail.example.com,并确保正向 A 记录也指回同一 IP。 - 系统更新:在 Ubuntu/Debian 上执行
apt update && apt upgrade,避免旧版 OpenSSL 或邮件组件带来兼容问题。 - 时间同步:启用
systemd-timesyncd或 chrony,DKIM 签名和 TLS 证书校验都依赖准确时间。

接下来再安装 Postfix 与 Dovecot。Postfix 负责 SMTP 收发,Dovecot 负责 IMAP/POP3 读取邮箱;你可以把 Postfix 理解为“邮局分拣与派送”,把 Dovecot 理解为“用户打开邮箱取信”。如果是 Ubuntu 22.04 或 24.04,基础安装通常可以这样开始:
sudo apt update
sudo apt install postfix dovecot-imapd dovecot-lmtpd opendkim opendkim-tools certbot
安装 Postfix 时可以选择 Internet Site,系统邮件名填写你的根域名,例如 example.com。安装完成后,不要急着外发测试邮件,先把 TLS、虚拟邮箱路径和认证方式梳理清楚,否则后面排查会混在一起。
配置 Postfix 与 Dovecot 的收发链路
Postfix 的核心配置通常在 /etc/postfix/main.cf。一个基础可用的方向是:服务器只接受本机域名邮件,不做开放中继;客户端提交邮件必须走 587 端口并通过 SASL 认证;本地投递交给 Dovecot LMTP。以下片段展示关键参数,真实域名要替换为你自己的域名:
myhostname = mail.example.com
mydomain = example.com
myorigin = /etc/mailname
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_tls_security_level = may
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
mailbox_transport = lmtp:unix:private/dovecot-lmtp
这里最关键的是 reject_unauth_destination。没有它,服务器可能变成开放中继,被滥用发送垃圾邮件后很快进入黑名单。你可以用 postconf -n 查看生效配置,用 systemctl reload postfix 重新加载配置,而不是每次都重启服务。
Dovecot 侧重点是邮箱位置、登录认证和 Postfix 对接。常见做法是使用 Maildir 格式,例如 /home/%u/Maildir,并在 /etc/dovecot/conf.d/10-mail.conf 中设置:
mail_location = maildir:~/Maildir
然后在 10-master.conf 中开放给 Postfix 使用的 auth socket:
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
完成后执行 doveconf -n 检查最终配置,再用 systemctl restart dovecot postfix 让两边一起生效。如果你此前也在做 网站性能 或 Web 服务调优,建议把邮件服务的日志、队列和证书续期单独纳入监控,避免 Web 与邮件共用资源时互相影响。
配置 SPF、DKIM 与 DMARC 提高可信度
能成功发送 SMTP 邮件,只说明链路通了;能稳定进入收件箱,还要让收件方相信“这封邮件确实来自你的域名”。SPF、DKIM 和 DMARC 就是这层信任基础。SPF 说明哪些服务器 IP 可以代表域名发信,DKIM 使用私钥给邮件签名,DMARC 告诉收件方当 SPF 或 DKIM 不匹配时怎么处理。
先添加 SPF 记录。如果只有这台邮件服务器负责发信,DNS(域名系统)TXT 记录可以从较严格的版本开始:
example.com. TXT "v=spf1 mx -all"
如果业务系统还会通过第三方服务发送通知邮件,就不能简单使用 -all 封死,需要把对应发送来源纳入同一条 SPF 记录。SPF 记录不能无限叠加,多个 TXT 版本会导致解析歧义;生产环境建议保持一条主记录,并控制 DNS 查询次数不超过 10 次。
DKIM 推荐用 OpenDKIM 生成密钥。示例命令如下:
sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s mail -D /etc/opendkim/keys/example.com
sudo chown -R opendkim:opendkim /etc/opendkim/keys/example.com
生成后会得到 mail.private 和 mail.txt。把 mail.txt 中的公钥内容添加到 DNS(域名系统)TXT 记录,名称一般是 mail._domainkey.example.com。Postfix 与 OpenDKIM 对接时,常用本地 socket,例如在 Postfix 中加入:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = local:/opendkim/opendkim.sock

最后添加 DMARC。初期不要直接上最严格策略,可以先用 p=none 收集报告,确认没有合法邮件被误伤后再调整到 quarantine 或 reject:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=s; aspf=s"
这一步完成后,文章就从“配置软件”进入“建立域名可信度”。如果你还在同步维护网站的 SSL(安全传输协议)证书、DNS(域名系统)和安全策略,可以参考 WordPress 教程 的站点维护思路。
上线前验证:不要只看一封测试邮件
上线验证分三层:服务端口、认证结果、投递表现。端口层面从外部网络测试 25、587、993;认证层面确认 SPF、DKIM、DMARC 同时通过;投递层面观察退信、延迟和垃圾箱比例。
你可以按下面顺序做最小验证:
- 用
openssl s_client -connect mail.example.com:993检查 IMAP SSL(安全传输协议)证书链是否完整。 - 用
swaks --to user@external.example --server mail.example.com --auth LOGIN --port 587 --tls测试客户端提交链路。 - 用
mailq查看队列是否积压,正常情况下小站点队列应在几分钟内清空。 - 查看
/var/log/mail.log中的status=sent、deferred、bounced,按收件域名归类排查。 - 用收件方原始邮件头确认
spf=pass、dkim=pass、dmarc=pass是否同时出现。

如果出现 Relay access denied,多半是收件人限制或认证提交配置有误;Connection timed out 要检查 25 端口;SPF fail 则看发信 IP 是否在 SPF 授权范围内。排错时每次只改一处,再用 postfix check 和固定测试邮件验证。
维护建议与适用边界
自建邮件服务器不是“一次搭好就不用管”的系统。建议每周检查邮件队列和退信日志,每月确认 IP 是否进入常见黑名单;业务系统发信应使用应用专用账号,并限制它只通过 587 端口认证提交。
如果你需要的是稳定业务邮件、少量团队邮箱和可控日志,自建 VPS(虚拟专用服务器)邮件服务器可以考虑;如果目标是大规模营销邮件或跨区域高频投递,更推荐使用专业邮件平台配合域名认证。总结来说,Postfix 与 Dovecot 解决“收发链路”,SPF、DKIM、DMARC 解决“身份可信”,日志和队列监控解决“长期可维护”。把这三层都做好,邮件服务器才算真正进入可运营状态。
如果你准备把邮件服务与企业官网、外贸站或 WordPress 站点部署在同一基础设施上,可以把 CPU、内存、磁盘 I/O、备份和 虚拟主机 方案放在一起评估。Hostease 的 VPS(虚拟专用服务器)适合用作这类中小规模邮件服务的基础环境,但我们仍建议先用测试域名完整跑通 7 天,再迁移正式业务邮箱。