
这篇教程教你如何用 Docker-Mailserver 在 VPS 上搭建一套完整的企业邮箱系统——从域名配置到客户端连接,每一步都附带可直接复制的命令,40 分钟内就能让第一封邮件收发成功。
很多中小企业在选邮箱方案时会遇到一个纠结:用第三方企业邮箱每年要付几千块,账号数一多成本直线上升;用免费邮箱又显得不专业。如果你手上有一台 VPS(虚拟专用服务器),其实完全可以自建一套企业邮箱——用 Docker-Mailserver 这个开源方案,半小时就能跑起来。
我们会覆盖域名 DNS 配置、Docker-Mailserver 安装、DKIM 签名、反垃圾策略、SSL(安全传输协议)证书,以及 Outlook / Thunderbird 客户端连接。不需要你提前有邮件服务器运维经验。
环境准备:你需要什么
- 一台 VPS:建议至少 1 核 1GB 内存,推荐 Ubuntu 22.04 或 Debian 12。内存低于 512MB 的话 ClamAV 可能跑不起来,后面会讲怎么关掉它。
- 一个域名:比如
yourcompany.com,你需要能修改它的 DNS 记录。 - Docker 和 Docker Compose:
apt install docker.io docker-compose-plugin即可安装。
如果你的 VPS 还没装 Docker,运行:
apt update && apt install -y docker.io docker-compose-plugin systemctl enable --now docker docker --version
DNS 记录配置:邮箱能不能收发的关键
很多人自建邮箱失败,不是 Docker 配置有问题,而是 DNS(域名系统,负责把域名翻译成 IP 地址)没配对。邮件服务器对 DNS 的依赖比 Web 服务器严格得多——MX 记录、SPF、DKIM、DMARC 四项缺一不可,少一个就可能被 Gmail、Outlook 直接拒收。
以 mail.yourcompany.com 作为邮件服务器主机名为例,你需要添加以下 DNS 记录:
| 记录类型 | 主机名 | 值 | 说明 |
|---|---|---|---|
| A | 你的 VPS IP | 邮件服务器指向 | |
| MX | @ | mail.yourcompany.com | 告诉其他服务器往哪里投递邮件 |
| TXT | @ | v=spf1 mx ~all | SPF 记录,声明哪些 IP 可以代表你发邮件 |
| TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:admin@yourcompany.com | DMARC 策略 |
DKIM 记录需要等 Docker-Mailserver 生成密钥后再填,我们在后面会专门讲。
如果你的域名在 Cloudflare 管理,注意把邮件相关的 A 记录和 MX 记录的”代理状态”关掉,否则外部邮件服务器无法直接连接到你的 VPS。
安装 Docker-Mailserver
Docker-Mailserver 是目前 GitHub 上星标最多的开源邮件服务器项目之一,核心优势是”一个 docker-compose.yml 搞定所有”——Postfix、Dovecot、SpamAssassin、ClamAV 全部打包好。
先创建工作目录,然后下载配置文件:
mkdir -p /opt/docker-mailserver cd /opt/docker-mailserver curl -o docker-compose.yml https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/docker-compose.yml curl -o mailserver.env https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env curl -o setup.sh https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/setup.sh chmod +x setup.sh
接下来编辑 docker-compose.yml,把关键参数改成你自己的环境:
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
container_name: mailserver
hostname: mail.yourcompany.com
ports:
- "25:25"
- "465:465"
- "587:587"
- "993:993"
volumes:
- ./mail-data:/var/mail
- ./mail-state:/var/mail-state
- ./config:/tmp/docker-mailserver/
- /etc/letsencrypt:/etc/letsencrypt:ro
env_file: mailserver.env
restart: always
stop_grace_period: 1m
cap_add:
- NET_ADMIN
- SYS_PTRACE
几个要注意的地方:
hostname必须填邮件服务器完整域名(FQDN),比如mail.yourcompany.com,不能只填yourcompany.com。- 端口 25 是 SMTP 收件端口,465/587 是发件端口,993 是 IMAP(互联网消息访问协议)加密端口。有些云服务商会默认封掉 25 端口,需要提前在安全组里放行。
/etc/letsencrypt挂载是为了复用 Let’s Encrypt 的 SSL 证书。
创建邮箱账号与启动服务
配置好 docker-compose.yml 后,启动容器并添加邮箱账号:
# 启动邮件服务器 docker compose up -d # 添加邮箱账号 ./setup.sh email add admin@yourcompany.com YourStrongPassword123 # 验证账号 ./setup.sh email list
每个员工需要一个独立账号:
./setup.sh email add zhangsan@yourcompany.com AnotherStrongPassword
密码建议至少 12 位,包含大小写字母和数字。Docker-Mailserver 默认使用 bcrypt 加密存储密码。

DKIM 签名:让你的邮件不被当成垃圾邮件
DKIM(DomainKeys Identified Mail)是自建邮箱能不能成功送达的最关键一步。你的邮件服务器用私钥对每封邮件签名,收件方服务器通过 DNS 里的公钥来验证签名。没有 DKIM 签名的邮件,Gmail 和 Outlook 基本都会丢进垃圾箱甚至直接拒收。
生成 DKIM 密钥:
# 生成 DKIM 密钥(2048 位) ./setup.sh config dkim keysize 2048
执行完后,DKIM 公钥会保存在 config/opendkim/keys/yourcompany.com/mail.txt 文件里,内容类似:
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )
把这段内容整理成一行,添加到 DNS 记录中:
| 记录类型 | 主机名 | 值 |
|---|---|---|
| TXT | mail._domainkey | v=DKIM1; h=sha256; k=rsa; p=MIIBIjAN… |
DNS 记录传播通常需要几分钟到几小时。验证 DKIM 是否生效:
dig TXT mail._domainkey.yourcompany.com +short
如果返回了你刚才添加的 DKIM 公钥内容,说明配置成功。
SSL 证书:加密邮件传输
邮件传输如果不加密就是明文传输,任何中间节点都能读到邮件内容。用 Let’s Encrypt 免费证书配合 Certbot 自动申请和续期:
# 安装 certbot apt install -y certbot # 申请证书(确保 80 端口可用) certbot certonly --standalone -d mail.yourcompany.com # 设置自动续期(证书 90 天过期) echo "0 3 * * * certbot renew --quiet && docker compose restart mailserver" | crontab -
证书申请成功后存放在 /etc/letsencrypt/live/mail.yourcompany.com/,Docker-Mailserver 会自动识别。重启容器让证书生效:
docker compose restart mailserver

反垃圾邮件与低内存优化
Docker-Mailserver 默认启用 SpamAssassin(垃圾邮件过滤)和 ClamAV(病毒扫描)。ClamAV 内存占用约 800MB,1GB 内存的 VPS 很可能跑崩。解决方法是在 mailserver.env 中关掉 ClamAV,改用 Rspamd:
ENABLE_CLAMAV=0 ENABLE_RSPAMD=1 ENABLE_SPAMASSASSIN=0
Rspamd 是 SpamAssassin 的替代方案,内存占用约 50MB,过滤效果不差。Docker-Mailserver 从 v12 开始默认推荐 Rspamd。
另外,如果你想启用 Fail2ban 来防止暴力破解,在 mailserver.env 里加上:
ENABLE_FAIL2BAN=1
Fail2ban 会监控认证日志,同一 IP 失败 5 次就封禁 30 分钟,是公网邮件服务器的必备安全措施。
客户端连接:Outlook 和 Thunderbird 设置
邮箱跑起来之后,员工需要在电脑或手机上配置邮件客户端。Docker-Mailserver 支持标准 IMAP/SMTP 协议,几乎所有主流客户端都能直接连接。

Outlook 配置参数:
| 设置项 | 值 |
|---|---|
| 收件服务器(IMAP) | mail.yourcompany.com |
| IMAP 端口 | 993 |
| 发件服务器(SMTP) | mail.yourcompany.com |
| SMTP 端口 | 465 或 587 |
| 用户名 | 完整邮箱地址 |
| 密码 | 创建账号时设置的密码 |
Thunderbird 配置参数与 Outlook 基本一致,支持”自动配置”——输入邮箱地址和密码即可。
连不上的话,按这个顺序排查:VPS 防火墙是否放行了 993 和 465 端口 → 云服务商安全组是否也放行 → docker compose logs mailserver 看 TLS 握手报错。
日常维护与监控
自建邮箱不是”装完就不管”的事。你需要定期检查三件事:
邮件队列——如果队列积压,说明有邮件发不出去。用 ./setup.sh queue 查看状态。
IP 信誉——用 MXToolbox 检查你的 IP 是否在主流黑名单上。在 独立服务器 上做自建邮箱会更灵活,磁盘空间通常比 VPS 大得多。
备份——邮件数据存放在 ./mail-data 目录下,定期打包:
tar czf /backup/mail-$(date +%Y%m%d).tar.gz /opt/docker-mailserver/mail-data
常见问题排查
发出去的邮件被退信(550 5.7.1)——检查 SPF、DKIM、DMARC 记录是否正确。如果记录都对,可能是 IP 段信誉问题,考虑换一个 IP 段的 VPS。
能收邮件但发不出去——大概率是 25 端口被云服务商封了,提交工单申请解封或改用 587 端口。
ClamAV 启动失败——内存不足,关掉 ClamAV 改用 Rspamd。
总结与下一步
自建企业邮箱五步:准备 VPS 和域名 → 配置 DNS → 安装 Docker-Mailserver → 生成 DKIM 并配置 SSL → 客户端连接。顺利的话 40 分钟就能让第一封邮件收发成功。
自建邮箱虽然省钱(一台 Hostease VPS 主机 每月几十块),但维护成本不可忽视——你需要关注 IP 信誉、处理退信、定期备份。团队超过 50 人或对送达率有严格要求的话,建议搭配商业邮件网关服务。
更多 VPS 运维和 Docker 部署教程,请访问 服务器相关博客。