VPS 搭建邮件服务器 (2025) - Docker Mailserver 容器化实战

在 2025 年,自建邮件服务器依然是技术爱好者的“终极副本”。虽然像 Gmail、Outlook 这样的免费服务很方便,但拥有自己的域名邮箱(如 [email protected])不仅看起来专业,更能让你完全掌控自己的数据隐私。
传统的 Postfix + Dovecot 配置极其繁琐,容易出错。本文将采用 Docker Mailserver —— 一个集成了 Postfix, Dovecot, SpamAssassin, ClamAV 等组件的开源容器化方案,让你在 10 分钟内跑起安全、现代化的邮件服务器。
在开始之前,请务必确认以下三点,否则100% 失败:
- 端口 25 是关键:绝大多数 VPS 服务商(AWS, GCP, Vulter 等)默认封锁 25 端口的出站流量。没有 25 端口,你无法向其他邮箱(如 Gmail)发送邮件。
- 自测方法:
telnet smtp.gmail.com 25。如果不通,请工单联系客服申请解封,或换用支持 25 端口的商家(如 Contabo, Racknerd 部分机房)。
- 自测方法:
- IP 信誉度:检查你的 VPS IP 是否在黑名单(RBL)中。如果 IP 脏了,发的邮件直接进垃圾箱。
- 反向解析 (PTR):必须拥有设置 PTR 记录的权限。这是大厂邮箱拒收垃圾邮件的第一道防线。
- 操作位置:这不是在 Cloudflare 设置的!请前往你的 VPS 商家控制面板(通常在 Networking 或 IPv4 Settings 页面),找到 "Reverse DNS" 或 "PTR Records",将其设置为你的邮件域名(如
mail.example.com)。
- 操作位置:这不是在 Cloudflare 设置的!请前往你的 VPS 商家控制面板(通常在 Networking 或 IPv4 Settings 页面),找到 "Reverse DNS" 或 "PTR Records",将其设置为你的邮件域名(如
如果满足以上条件,Lets Go!
在部署服务前,必须先配好 DNS。假设你的 IP 是 1.2.3.4,域名是 example.com。
去你的域名服务商(推荐 Cloudflare)添加以下记录:
| 类型 | 名称 | 内容 (Value) | 说明 |
|---|---|---|---|
| A | mail | 1.2.3.4 | 邮件服务器地址 |
| MX | @ | mail.example.com | 优先级设为 10 |
| TXT | @ | v=spf1 mx ~all | SPF 记录:声明只允许 MX 记录中的服务器发信 |
| A | example.com | 1.2.3.4 | (可选) 主域名解析 |
还有两个重要记录(DKIM 和 DMARC)将在部署后配置。
Docker Mailserver 需要暴露多个端口。请在 VPS 的防火墙(如 UFW)或云商的安全组中放行入站流量:
- 25 (TCP): SMTP 邮件传输(必须)
- 80 & 443 (TCP): 用于申请 Let's Encrypt SSL 证书(必须)
- 587 & 465 (TCP): 客户端发送邮件(SMTP Submission)
- 993 (TCP): 客户端接收邮件(IMAP SSL)
# UFW 示例
ufw allow 25/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 587/tcp
ufw allow 465/tcp
ufw allow 993/tcp
-
环境准备: 确保已安装 Docker 和 Docker Compose。 注意:如果你的 VPS 上已经运行了 Nginx/Caddy(占用了 80 端口),本教程的自动证书申请会失败。建议使用干净的 VPS 部署。
-
创建目录与配置:
mkdir -p mailserver/{config,data} && cd mailserver -
获取官方配置文件(推荐):
wget -O compose.yaml https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/compose.yaml wget -O .env https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env -
修改
.env文件:vim .env,重点修改以下几项:HOSTNAME=mail.example.com # 你的邮件服务器完整域名 DOMAINNAME=example.com # 你的主域名 SSL_TYPE=letsencrypt # 自动申请 SSL 证书 -
启动服务:
docker compose up -d
Docker Mailserver 提供了一个 setup.sh 脚本来管理服务。
-
下载管理脚本:
wget -O setup.sh https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/setup.sh chmod +x setup.sh -
创建邮箱账户:
./setup.sh email add [email protected] strongPassword123 -
生成 DKIM 密钥(防诈骗关键):
./setup.sh config dkim生成的公钥位于
docker-data/dms/config/opendkim/keys/example.com/mail.txt。 -
去 Cloudflare 添加 DKIM 记录: 查看
mail.txt内容,提取p=后面的长字符串。- 类型:TXT
- 名称:
mail._domainkey - 内容:
v=DKIM1; k=rsa; p=你的公钥字符串
-
添加 DMARC 记录(提升信誉):
- 类型:TXT
- 名称:
_dmarc - 内容:
v=DMARC1; p=none; rua=mailto:[email protected]
服务启动几分钟后,它会自动通过 Let's Encrypt 申请 SSL 证书。
客户端连接参数:
- 邮件地址:
[email protected] - IMAP (接收):
mail.example.com,端口 993 (SSL/TLS) - SMTP (发送):
mail.example.com,端口 465 (SSL/TLS) 或 587 (STARTTLS)
手机或电脑上的 Outlook / Apple Mail 填入上述信息即可收发邮件。
配置完成后,千万不要急着群发。
- 测试得分:访问 Mail-Tester,获取一个临时邮箱,用你的服务器发一封信过去。如果你严格按照上述步骤(尤其是 SPF/DKIM/PTR),应该能拿到 10/10 的满分。
- 数据备份(重要):所有的邮件数据和配置都存储在
mailserver/docker-data目录下。请务必定期备份此目录! 一旦丢失,所有邮件将找不回。(参考:VPS 自动备份方案)
自建邮箱是一场修行,祝你的邮件永不进垃圾箱!