自建邮箱服务
部署文件准备
docker部署脚本
services:
mailserver:
container_name: ${CONTAINER_NAME}
image: ghcr.io/docker-mailserver/docker-mailserver:15.1.0
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
env_file: ./conf/mailserver.env
healthcheck:
retries: 0
test: ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1
timeout: 3s
hostname: ${MS_HOSTNAME}
ports:
- ${HOST_IP}:${PANEL_APP_PORT_SMTP}:25
- ${HOST_IP}:${PANEL_APP_PORT_IMAP4_143}:143
- ${HOST_IP}:${PANEL_APP_PORT_ESMTP_465}:465
- ${HOST_IP}:${PANEL_APP_PORT_ESMTP_587}:587
- ${HOST_IP}:${PANEL_APP_PORT_IMAP4_993}:993
restart: on-failure:5
stop_grace_period: 1m
environment:
- SSL_TYPE=letsencrypt
- LETSENCRYPT_HOST=mail.xx.com
- LETSENCRYPT_EMAIL=admin@xx.com
volumes:
- ./data/dms/mail-data/:/var/mail/
- ./data/dms/mail-state/:/var/mail-state/
- ./data/dms/ssl/:/etc/letsencrypt/
- ./data/dms/mail-logs/:/var/log/mail/
- ./data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- ./ssl:/etc/letsencrypt
.env环境变量
CONTAINER_NAME='mailserver'
CPUS=0
MEMORY_LIMIT=0
HOST_IP=''
MS_HOSTNAME='mail.xx.com'
PANEL_APP_PORT_ESMTP_465=465
PANEL_APP_PORT_ESMTP_587=587
PANEL_APP_PORT_IMAP4_143=143
PANEL_APP_PORT_IMAP4_993=993
PANEL_APP_PORT_SMTP=25
ENABLE_RSPAMD=1
ENABLE_OPENDMARC=0
ENABLE_POLICYD_SPF=0
ENABLE_OPENDKIM=1
SSL_TYPE=letsencrypt
LETSENCRYPT_HOST=mail.xx.com
LETSENCRYPT_EMAIL=admin@xx.com
ssl证书
容器内检查SSL配置
docker exec mailserver printenv | grep SSL
本地ssl文件 挂载到 /etc/letsencrypt/live/{DOMAIN}/
服务运行
启动容器
docker compose up -d
管理员账户
容器启动后需要在120s内创建管理员账户
setup email add user@domain.com 'yourpassword'
dkim解析
进入容器执行
setup config dkim keysize 2048
生成后会保存在 ./docker-data/dms/config/opendkim/keys/{DOMAIN}/mail.txt
dns解析设置
添加主域名解析
指向mailserver的服务IP
添加spf解析
添加dmarc解析
v=DMARC1; p=quarantine; rua=mailto:admin@yunlix.com
添加dkim解析
添加DNS dkim解析
name设置为 mail._domainkey
content 设置为 mail.txt中的内容, 需要移除双引号, 大概格式类似:
v=DKIM1; h=sha256; k=rsa; p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
验证账户能否通过 Dovecot 登录
可以使用容器内命令模拟 IMAP 登录:
docker exec -it mailserver doveadm auth test admin@xx.com StrongPassword123!
setup命令
# 创建邮箱账户
setup email add user@xx.com [password]
# 删除邮箱账户
setup email del user@xx.com
# 列出所有邮箱账户
setup email list
# 修改用户密码
setup email update user@xx.com 'NewPassword456!'
# 添加转发(Alias),> 所有发往 support@xx.com 的邮件会自动转发到 admin@xx.com。
setup alias add support@xx.com admin@xx.com
# 删除转发规则
setup alias del support@xx.com
# 查看全部别名规则
setup alias list
# 测试证书加载情况
setup diagnose
邮箱登录设置
IMAP
服务器:IP地址
收信端口:993
加密:SSL/TLS
发信端口:465
加密:SSL/TLS
tips
收件问题
收件被拒绝
可能是spf等问题
ENABLE_RSPAMD=1
ENABLE_OPENDMARC=0
ENABLE_POLICYD_SPF=0
ENABLE_OPENDKIM=1
通过容器内运行
printenv
查看所有配置,与上文保持一致