Loading...

文章背景图

自建邮箱服务器:docker-mailserver 完整部署指南

2026-09-13
0
-
- 分钟
|

自建邮箱服务器:docker-mailserver 完整部署指南

不想再用 xx 邮箱尾巴发信,想拥有自己的 xxx@你的域名 邮箱?docker-mailserver 是最省事的自建方案——一个容器打包了 Postfix(发信)+ Dovecot(收信)+ Rspamd(反垃圾)+ ClamAV(查毒)+ Fail2ban 一整套邮件栈。

本文记录我在 Debian VPS 上用 Docker 部署 docker-mailserver 的完整过程,包括证书、账号、域名解析等关键配置。敏感信息已脱敏。

一、自建邮件服务器,先说清楚难点

邮件是互联网上门槛最高的自建服务,做好心理预期:

  • 发信信誉:新域名/新 IP 没有信誉,容易被 Gmail/Outlook 丢进垃圾箱,需要时间养。
  • SPF/DKIM/DMARC:三件套一个都不能少,否则邮件大概率被拒收。
  • 端口:25 端口很多云厂商默认封禁,可能要申请解封。

但这些用 docker-mailserver 都能优雅解决,下面一步步来。

二、前置准备

  • 一台 Linux VPS + Docker / Docker Compose
  • 一个域名,并拥有它的 DNS 控制权
  • 能开放 25/465/587/993 等端口(25 可能需向云厂商申请解封)
  • 一个反向代理或证书源(我用 Nginx Proxy Manager 统一管证书)

三、Docker Compose 部署

核心 docker-compose.yml

services:
  mailserver:
    image: mailserver/docker-mailserver:latest
    container_name: mailserver
    hostname: mail.example.top
    restart: always
    stop_grace_period: 1m
    environment:
      - LOG_LEVEL=info
      - ACCOUNT_PROVISIONER=FILE
      # 证书:复用 NPM 签发的 Let's Encrypt 证书
      - SSL_TYPE=manual
      - SSL_CERT_PATH=/etc/letsencrypt/live/npm-12/fullchain.pem
      - SSL_KEY_PATH=/etc/letsencrypt/live/npm-12/privkey.pem
      - OVERRIDE_HOSTNAME=mail.example.top
      - SPOOF_PROTECTION=1
    ports:
      - "25:25"      # SMTP
      - "143:143"    # IMAP
      - "465:465"    # SMTPS
      - "587:587"    # 提交(Submission)
      - "993:993"    # IMAPS
      - "110:110"    # POP3
      - "995:995"    # POP3S
      - "4190:4190"  # Sieve
    volumes:
      - ./dms/mail-data:/var/mail/
      - ./dms/mail-state:/var/mail-state/
      - ./dms/mail-logs:/var/log/mail/
      - ./dms/config:/tmp/docker-mailserver/
      - /path/to/npm/ssl:/etc/letsencrypt

几次关键的取值说明:

  • ACCOUNT_PROVISIONER=FILE:用文件管理邮箱账号,简单直观。
  • SSL_TYPE=manual + 证书路径:直接复用 NPM 已经签好的证书,省得邮箱容器再走一遍 ACME。
  • 证书目录整个挂载:因为 Let's Encrypt 目录有软链接和归档,得把 NPM 的 ssl 目录整体挂进来,而不仅是单个文件。

启动:

docker compose up -d

首次启动会生成 config/ 目录,之后 docker compose restart 才会加载部分配置。

四、创建邮箱账号

因为用 ACCOUNT_PROVISIONER=FILE,账号写在 config/postfix-accounts.cf 里。用容器内置的 setup 脚本创建:

docker compose exec mailserver setup email add 用户名@example.top 密码

或直接编辑文件,格式(密码用 doveadm pw 生成的哈希):

# config/postfix-accounts.cf
user@example.top|{SHA512-CRYPT}$6$...

五、配置 DNS(关键,别跳过)

邮件能不能发出去、会不会进垃圾箱,全看这几条 DNS 记录。

1. MX 记录

example.top  MX  10  mail.example.top

2. A 记录 + PTR

mail.example.top  A  服务器IP

还要让云厂商把服务器 IP 的反向解析(PTR)指回 mail.example.top

3. SPF

example.top  TXT  "v=spf1 mx ~all"

4. DKIM

用容器生成密钥:

docker compose exec mailserver setup config dkim

把生成在 config/opendkim/keys/mail.txt 内容配成 TXT 记录:

mail._domainkey.example.top  TXT  "v=DKIM1; h=sha256; k=rsa; p=..."

5. DMARC

_dmarc.example.top  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@example.top"

刚开始 p=none 观察一段时间,确认没问题再收紧到 quarantinereject

六、客户端接入

配好之后,用任意邮件客户端接入:

  • 收信(IMAP):mail.example.top:993,SSL/TLS
  • 发信(SMTP):mail.example.top:587,STARTTLS
  • 账号:user@example.top + 密码

七、反垃圾与查毒(自带)

docker-mailserver 开箱自带:

  • Rspamd:内容级反垃圾评分,支持学习(训练)
  • ClamAV:病毒查杀
  • Fail2ban:防暴力破解

一般无需额外配置即可用,进阶可调 RSPAMD_* 环境变量或改 rspamd 配置。

八、踩坑与注意事项

  1. 25 端口被封:很多云厂商默认封 25,先提交工单解封,否则收不了外部来信。
  2. SPF/DKIM/DMARC 缺一不可:缺了大概率被 Gmail 拒收或丢垃圾箱,务必三件套配齐并测试。
  3. 证书软链接:挂载 NPM 证书时必须挂整个 ssl 目录,只挂单个 fullchain.pem 会因为符号链接断掉而失败。
  4. 改配置要重启:不少配置(尤其 SMTP 相关)要 stop_grace_period 内的优雅重启才生效。
  5. 信誉养起来慢:初期发信可能进垃圾箱,正常使用 + 三件套配好会逐步改善。

测试是否配好,可以用 mail-tester.com 发一封测试信,看评分。

九、总结

docker-mailserver 把「自建邮箱」这个原本极其繁琐的工程,收敛成一个容器 + 三条 DNS 记录的事。核心就三块:证书(复用 NPM)账号(FILE 方式)DNS 三件套(SPF/DKIM/DMARC)。把这三块啃下来,你就拥有了一套完全自主的邮箱。

自建邮箱是自托管里成就感最高、也最需要耐心的一项。如果你也在折腾,欢迎交流。

原创

自建邮箱服务器:docker-mailserver 完整部署指南

本文链接: 自建邮箱服务器:docker-mailserver 完整部署指南

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录