零门槛自建邮件服务器:Docker-Mailserver + Let’s Encrypt + DKIM 全流程
0 条评论不占用 80/443 端口 | 90 天自动续期 | 国内网络友好
一、场景与目标
个人 / 小型团队 拥有自己的域名邮箱
不暴露 80/443 也能拿到 Let’s Encrypt 证书
Docker 化 部署,一键迁移、备份
DKIM、SPF、DMARC 全套反垃圾配置
二、前置清单
| 项目 | 示例值 | 备注 |
|---|---|---|
| 域名 | mail.owin.work |
A 记录指向服务器公网 IP |
| DNS | 腾讯云 / 阿里云 | 必须支持 API(用于 DNS-01) |
| 系统 | Debian 12 / Ubuntu 22.04 | root 权限 |
| 开放端口 | 25/143/465/587/993/995/110/4190 | 防火墙放行 |
| 目录规划(可任意路径) |
/root/mail/
├── config/ # 映射到容器 /tmp/docker-mailserver
├── maildata/ # 邮箱数据
└── maillogs/ # 日志
证书申请(国内网络零障碍)
思路: 使用 DNS-01 验证,不占用 80/443 端口
- 安装 acme.sh(离线下载示例)
# 1. 上传离线包 acme.sh.tgz
tar xzf acme.sh.tgz
cd acme.sh
./acme.sh --install --home ~/.acme.sh --config-home ~/.acme.sh/data
source ~/.bashrc
- 配置腾讯云 DNS API
export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- 申请 & 自动续期证书
# 申请
acme.sh --issue --dns dns_tencent -d mail.owin.work --ecc --force
# 配置自动部署
acme.sh --install-cert \
-d mail.owin.work --ecc \
--fullchain-file /root/mail/config/ssl/cert.pem \
--key-file /root/mail/config/ssl/key.pem \
--reloadcmd "docker restart mailserver"
后续 90 天到期前 30 天自动续期 + 重启容器,零人工干预。
四、启动邮件容器(最终命令)
docker stop mailserver 2>/dev/null && docker rm mailserver 2>/dev/null
docker run -d \
--name mailserver \
--hostname mail.owin.work \
--restart=always \
-e TZ=Asia/Shanghai \
-e SSL_TYPE=manual \
-e SSL_CERT_PATH=/tmp/docker-mailserver/ssl/cert.pem \
-e SSL_KEY_PATH=/tmp/docker-mailserver/ssl/key.pem \
-e ENABLE_CLAMAV=0 \
-e ENABLE_FAIL2BAN=0 \
-p 25:25 -p 143:143 -p 465:465 -p 587:587 \
-p 993:993 -p 995:995 -p 110:110 -p 4190:4190 \
-v /root/mail/config:/tmp/docker-mailserver \
-v /root/mail/maildata:/var/mail \
-v /root/mail/maillogs:/var/log/mail \
mailserver/docker-mailserver:latest
五、DKIM 反垃圾配置
# 生成 DKIM
docker exec mailserver setup config dkim domain mail.owin.work
# 复制 TXT 值
docker exec mailserver cat /tmp/docker-mailserver/opendkim/keys/mail.owin.work/mail.txt
在 DNS 增加 TXT 记录
| 主机记录 | 类型 | 值 |
|---|---|---|
mail._domainkey |
TXT | v=DKIM1; k=rsa; p=MIIB... |
重启容器生效:
docker restart mailserver
六、验证
| 工具 | 命令 |
|---|---|
| 服务器端 | docker exec mailserver openssl x509 -in /tmp/docker-mailserver/ssl/cert.pem -noout -issuer -dates |
| 外网 | openssl s_client -connect mail.owin.work:465 -servername mail.owin.work |
| 垃圾邮件评分 | https://mail-tester.com |
七、日常运维
| 任务 | 命令 |
|---|---|
| 新增邮箱 | docker exec mailserver setup email add user@owin.work |
| 查看日志 | docker logs mailserver |
| 重启服务 | docker restart mailserver |
| 证书续期 | acme.sh 全自动(无需人工) |
