使用docker-mailserver部署自己的email服务
这个邮件服务是用docker部署的, 很多步骤都直接在配置文件中完成了, 非常省事. 而且它只提供邮件服务, 没有webmail, 因此也不占用80/443端口, 这意味着你的服务器还可以用来做其他的事. 我自己在部署的时候发现官方的介绍给的对小白不是很友好, 按照官方的简单部署流程跟着做发现会报错. 而很多能找到的几年前的文章里给的方法大多现在也有改动, 完全照做可能是不行了, 因此这里简单记录下自己摸索的部署过程.
提前准备
首先要有一个绑定了服务器的域名, 要解析DNS, 我这里以cloudflare为例. 这里假设服务器的域名是domain.com, 服务器ip是1.2.3.4, 实际使用时把这个改成自己的就好.
| Type | Name | Content |
|---|---|---|
| A | 1.2.3.4 | |
| MX | domain.com | mail.domain.com |
| TXT | domain.com | v=spf1 mx ~all |
| TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine |
然后为自己的的VPS添加RDNS记录, 这个不设置的话邮件很容易进Junk. 申请的方法一般是在服务器后台的Network或者IP相关的页面, 我这里以搬瓦工的为例子.
然后申请一个证书, 因为希望走TLS协议, 申请证书的方法在这里和这里详细地介绍过了, 就不赘述了.
配置docker compose
安装docker和docker compose
# 安装docker
curl -sSL https://get.docker.com/ | sh
systemctl enable --now docker
# 安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose下载所需管理和配置文件.
mkdir ~/mailserver && cd ~/mailserver
DMS_GITHUB_URL='https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master'
wget "${DMS_GITHUB_URL}/docker-compose.yml"
wget "${DMS_GITHUB_URL}/mailserver.env"
wget "${DMS_GITHUB_URL}/setup.sh"
chmod a+x ./setup.sh然后编辑docker-compose.yml文件. 特别注意一下hostname+domainname等于你的邮件域名, 比如下面的填法结果是mail.domain.com. 然后volumes那一项中写好自己的证书地址, 我就以证书存放在/tmp/ssl/为例设置了.
version: '3.8'
services:
mailserver:
image: docker.io/mailserver/docker-mailserver:latest
container_name: mailserver
# If the FQDN for your mail-server is only two labels (eg: example.com),
# you can assign this entirely to `hostname` and remove `domainname`.
hostname: mail
domainname: domain.com
env_file: mailserver.env
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/edge/config/security/understanding-the-ports/
# To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
ports:
- "25:25" # SMTP (explicit TLS => STARTTLS)
- "143:143" # IMAP4 (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "587:587" # ESMTP (explicit TLS => STARTTLS)
- "993:993" # IMAP4 (implicit TLS)
- "110:110"
- "995:995"
volumes:
- ./docker-data/dms/mail-data/:/var/mail/
- ./docker-data/dms/mail-state/:/var/mail-state/
- ./docker-data/dms/mail-logs/:/var/log/mail/
- ./docker-data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- /tmp/ssl/:/tmp/ssl:ro
restart: always
stop_grace_period: 1m
cap_add:
- NET_ADMIN
healthcheck:
test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
timeout: 3s
retries: 0填写完毕后配置mailserver.env文件. 由于内容太多, 我只给几个需要修改的地方, 如果有定制化需求可以参考官方说明.
[email protected]
PERMIT_DOCKER=network
SSL_TYPE=manual
SSL_CERT_PATH=/tmp/ssl/server.crt
SSL_KEY_PATH=/tmp/ssl/server.key然后添加邮箱信息.
./setup.sh email add [email protected] your_password生成DKIM 签名记录.
./setup.sh config dkim上面这条指令会在当前目录的./docker-data/dms/config/opendkim/keys/domain.com/目录生成一个mail.txt文件, 根据里面的信息在DNS解析中添加一条Type为TXT, Name为mail._domainkey, Content为DKIM内容的记录. 特别注意的, 字符串太长会有换行情况, 记得把换行的部分给拼接起来, 像下面这样.

填写出来大概是这样子的.

然后就可以up了.
docker-compose up -d mailserver记得开放所需要的端口.
ufw allow 25
ufw allow 110
ufw allow 143
ufw allow 465
ufw allow 587
ufw allow 993
ufw allow 995测试和评分
如果有失败的, 可以看下后面的踩坑记录, 可能会有帮助.
首先测试一下tls有没有生效. 这个网址中输入自己的邮箱域名就可以查看是否支持tls了.
由于docker-mailserver没有webmail, 所以我们要通过客户端使用. 这里以Mac的mail应用为例.
然后发送邮件试试看~

一些后话 (坑)
可以到mail-tester试一下自己邮件服务的评分能达到多少. 我是8.9, 因为这个主机厂商的后台有问题, 我RDNS设置的是邮件域名, 但是莫名其妙解析到了一个奇怪的域名, 只能联系客服解决😅. 解析域名可以用nslookup指令来查看.
然后如果始终发不出邮件, 可以用docker-compose logs -f查看日志, 如果是因为timeout的话, 很大概率是因为服务商把25端口给ban了, 防止垃圾邮件服务部署. 这个的话一般是要联系客服才能开放. 是不是25号端口被ban可以在防火墙查看, 也可以通过telnet smtp.google.com 25测试. 如果结果一直是trying ip...的话那就是没开放, 如果是输出了三行那就是可以正常连接.
更新
在正确的rnds解析生效后, mail-tester分数有10/10了.
Reference
https://github.com/docker-mailserver/docker-mailserver
独特的构思和新颖的观点,让这篇文章在众多作品中脱颖而出。
每个标点都承载着思考的重量。
新车即将上线 真正的项目,期待你的参与
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新盛客服电话是多少?(?183-8890-9465—《?薇-STS5099】【
新盛开户专线联系方式?(?183-8890--9465—《?薇-STS5099】【?扣6011643??】
新盛客服开户电话全攻略,让娱乐更顺畅!(?183-8890--9465—《?薇-STS5099】客服开户流程,华纳新盛客服开户流程图(?183-8890--9465—《?薇-STS5099】
华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】