为什么
绝大部分云服务商都对邮件服务的 25 端口进行了封锁,我们就无法使用 25 端口对外发送邮件
想要使用 25 端口就要跟云服务商博弈解除屏蔽,再不然就使用第三方服务进行代发送
本次安装部署使用的是resend服务进行中继发送邮件(每月免费额度 3000 封)
docker-mailserver 配置
docker-compose.yaml 文件配置如下
version: "3.8"
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
container_name: mailserver
# Provide the FQDN of your mail server here (Your DNS MX record should point to this value)
hostname: mail.ccpu.cc # 修改成你的域名
env_file: mailserver.env
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
ports:
- "25:25" # SMTP (explicit TLS => STARTTLS, Authentication is DISABLED => use port 465/587 instead)
- "143:143" # IMAP4 (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "587:587" # ESMTP (explicit TLS => STARTTLS)
- "993:993" # IMAP4 (implicit TLS)
volumes:
- ./mail/:/var/mail/
- ./mail-state/:/var/mail-state/
- ./logs/:/var/log/mail/
- ./config/:/tmp/docker-mailserver/
- [证书路径]/:/nginx/certs/
- /etc/localtime:/etc/localtime:ro
environment:
- SSL_TYPE=manual # 如果要手动设置路径证书类型必须是手动
- SSL_CERT_PATH=[证书路径]/full.pem # 改成你自己的证书地址
- SSL_KEY_PATH=[证书路径]/key.pem # 改成你自己的证书地址
- DEFAULT_RELAY_HOST=[SMTP中继服务器服务商获取]:端口 # 中继服务主机
- RELAY_USER=[服务商获取] # 中继服务用户名
- RELAY_PASSWORD=[服务商获取] # 中继服务密码
restart: always
stop_grace_period: 1m
# Uncomment if using `ENABLE_FAIL2BAN=1`:
# cap_add:
# - NET_ADMIN
healthcheck:
test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
timeout: 3s
retries: 0
将配置中[] 处内容修改为自己的配置,然后将官网的 mailserver.env下载放置在 docker-compose.yaml 同一个文件夹下,怎么申请SSL证书这里不做详解网上已经有很多的教程
Resend
在resend 官网中 Settings -> SMTP Tab中按照教程 配置好 API Key 和 domain 相关配置
等待 domain 验证通过后 回到Settings -> SMTP Tab中 获取到要使用的主机、用户名、密码,将这些内容修改
到 docker-compose.yaml 中
- DEFAULT_RELAY_HOST=smtp.resend.com:端口 # 中继服务主机
- RELAY_USER=resend # 中继服务用户名
- RELAY_PASSWORD=[YOUR_API_KEY] # 创建的API Key 就是密码
初始化邮件服务器
# 首次启动初始化
docker compose up -d
# 在 120 秒内创建一个邮箱
docker exec mailserver setup email add i@ccpu.cc <你的邮箱密码>
# 然后为自己的邮箱创建postmaster别名 一定
docker exec mailserver setup alias add postmaster@ccpu.cc i@ccpu.cc
# 生成 DKIM 签名
docker exec -it mailserver setup config dkim
postmaster账号在Docker-Mailserver中扮演着非常重要的角色,它可以帮助管理员及时了解邮件服务器的运行情况,并进行相应的处理和调整,主要有以下几个用途:
- 用于接收系统警告和错误信息
- 用于接收未能送达的邮件
用于接收管理员通知和系统警报
将
config/opendkim/keys/ccpu.cc/mail.txt中()的内容复制出来,删除掉其中的""和空格拼接成一行字符串备用
DNS 配置
| 类型 | 名称 | 值 | 说明 |
|---|---|---|---|
| A | 你的服务器 ip | 邮件路由 | |
| MX | @ | mail.ccpu.cc | 优先级设置成 10 |
| TXT | @ | v=spf1 mx -all | SPF 发件人验证 |
| TXT | _dmarc | v=DMARC1; p=none; | DMARC 记录 |
| TXT | mail._domainkey | mail.txt处理后的字符串 | DKIM 记录 |
加上之前Resend自动配置的DNS记录总共8条记录
验证邮件系统
docker-mailserver 没有提供webUI,因此我们想要收发邮件要借助第三方的邮件客户端,如:Thunderbird 等
本次使用Mac内自带的邮件客户端
- 在弹出的选择邮件账户提供商中使用
其他"邮件"账户 - 先设置好自己的邮件地址和密码进行登录

image-20250615140051533
- 这时会重新弹出输入收发服务器的弹框,我们输入之前配置好的服务器,此时它会自动配置端口等信息

image-20250615140225565
如果使用的是其他邮件客户端可以参照如下信息进行配置
- imap 主机是 mail.ccpu.cc、端口是 993(SSL/TLS 加密方式)、用户名是邮箱、密码是邮箱密码
- smtp 主机是 mail.ccpu.cc、端口是 587(STARTTLS 加密方式)、用户名是邮箱、密码是邮箱密码
- 最后登录成功就可以收发邮件了
查看邮件评分
给邮件健康值检测发送测试邮件,查看邮件评分

image-20250615140932969
问题解决
安装完成后日志打印中看到如下的打印
2025-06-14T17:06:08.459971+00:00 mail postfix/smtp[762]: SMTPS wrappermode (TCP port 465) requires setting "smtp_tls_wrappermode = yes", and "smtp_tls_security_level = encrypt" (or stronger)
此时需要在 postfix 修改配置,在文档得知需要在 config 目录先新建或修改 postfix-main.cf
在 postfix-main.cf 中新增如下配置后重启容器
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
