
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
mailserver2/mailserver 是一个简单且功能全面的邮件服务器,基于多个 Docker 镜像构建,提供完整的邮件收发、存储、安全防护及管理功能。该镜像源自 https://github.com/hardware/mailserver 项目的分支,专注于提供基础维护支持。
1.1-latest 版本中可用)适用于需要自建邮件服务器的个人、小型企业或组织,尤其适合以下场景:
| 类型 | 不含 ClamAV | 含 ClamAV |
|---|---|---|
| CPU | 1 GHz | 1 GHz |
| 内存 | 1.5 GiB | 2 GiB |
| 类型 | 不含 ClamAV | 含 ClamAV |
|---|---|---|
| CPU | 1 GHz | 1 GHz |
| 内存 | 512 MiB | 1 GiB |
建议使用干净的操作系统安装。若使用 Debian,需移除默认 MTA Exim4:
bashapt-get purge exim4*
确保没有其他应用占用邮件服务端口:
bashnetstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
若有结果,需停止或移除占用端口的应用。
若启用防火墙,需开放以下端口:
| 服务 | 软件 | 协议 | 端口 |
|---|---|---|---|
| SMTP | Postfix | TCP | 25 |
| HTTP | Nginx | TCP | 80 |
| POP3 | Dovecot | TCP | 110 |
| IMAP | Dovecot | TCP | 143 |
| HTTPS | Nginx | TCP | 443 |
| SMTPS | Postfix | TCP | 465 |
| Submission | Postfix | TCP | 587 |
| IMAPS | Dovecot | TCP | 993 |
| POP3S | Dovecot | TCP | 995 |
| ManageSieve | Dovecot | TCP | 4190 |
推荐使用 https://github.com/hardware/nsd-dnssec 作为带 DNSSEC 功能的权威名称服务器。
DNS 记录和反向 PTR
正确的 DNS 配置至关重要,需设置以下记录:
| 主机名 | 类别 | 类型 | 优先级 | 值 |
|---|---|---|---|---|
| IN | A/AAAA | 任意 | 1.2.3.4(服务器IP) | |
| spam | IN | CNAME | 任意 | mail.domain.tld. |
| webmail | IN | CNAME | 任意 | mail.domain.tld. |
| postfixadmin | IN | CNAME | 任意 | mail.domain.tld. |
| @ | IN | MX | 10 | mail.domain.tld. |
| @ | IN | TXT | 任意 | "v=spf1 a mx ip4:SERVER_IPV4 ~all" |
| {{selector}}._domainkey | IN | TXT | 任意 | "v=DKIM1; k=rsa; p=您的DKIM公钥" |
| _dmarc | IN | TXT | 任意 | "v=DMARC1; p=reject; rua=mailto:; ruf=mailto:; fo=0; adkim=s; aspf=s; pct=100; rf=afrf; sp=reject" |
注意:
mail,可通过 DKIM_SELECTOR 环境变量修改/mnt/docker/mail/dkim/domain.tld/{{selector}}.public.key 路径下找到/mnt/docker/mail/dkim/domain.tld 文件夹即可可使用以下服务审计邮件服务器配置:
1 - 准备环境
推荐使用 https://traefik.io/ 作为反向代理,也可使用 Nginx、Apache 等替代方案。
bash# 创建 Traefik 的 Docker 网络(仅 IPv4) docker network create http_network # 创建所需文件夹和文件 mkdir -p /mnt/docker/traefik/acme && cd /mnt/docker \ && curl https://raw.githubusercontent.com/mailserver2/mailserver/master/docker-compose.sample.yml -o docker-compose.yml \ && curl https://raw.githubusercontent.com/mailserver2/mailserver/master/sample.env -o .env \ && curl https://raw.githubusercontent.com/mailserver2/mailserver/master/traefik.sample.toml -o traefik/traefik.toml \ && touch traefik/acme/acme.json \ && chmod 600 docker-compose.yml .env traefik/traefik.toml traefik/acme/acme.json
编辑 .env 和 traefik.toml 文件,根据需求调整配置,然后启动所有服务:
bashdocker-compose up -d
2 - Postfixadmin 安装
PostfixAdmin 是用于管理***、虚拟域和别名的 Web 界面。
3 - Rainloop 安装(可选)
Rainloop 是一个简单、现代且快速的 Web 邮件客户端,支持 Sieve 脚本(过滤器和假期回复)、GPG 加密。
4 - 完成安装
首次启动容器时,需要几分钟时间生成 SSL 证书(如需)、DKIM 密钥对和更新 Clamav 数据库。默认包含自签名证书,建议替换为可信证书(详见下文 SSL 证书配置)。
可用 Web 服务列表:
| 服务 | URI |
|---|---|
| Traefik 控制台 | [***] |
| Rspamd 控制台 | [***] |
| 管理界面 | [***] |
| Web 邮件客户端 | [***] |
Traefik 控制台使用基本认证(默认用户:admin,密码:***),可使用 htpasswd 生成加密密码。Rspamd 控制台密码在 docker-compose.yml 中定义。
查看启动日志:
bashdocker logs -f mailserver
以下是简化的 docker-compose.yml 示例:
yamlversion: '3.8' services: mailserver: image: docker.xuanyuan.run/mailserver2/mailserver:latest restart: always depends_on: - mariadb - redis environment: - DBPASS=your_secure_password - RSPAMD_PASSWORD=your_rspamd_password - DKIM_KEY_LENGTH=2048 - ENABLE_POP3=true - DISABLE_CLAMAV=false volumes: - /mnt/docker/mail:/var/mail - /mnt/docker/mail/filter:/var/spool/sieve - /mnt/docker/mail/dkim:/etc/dkim - /mnt/docker/traefik/acme:/etc/letsencrypt ports: - "25:25" - "143:143" - "587:587" - "993:993" networks: - http_network mariadb: image: docker.xuanyuan.run/mariadb:10.5 restart: always environment: - MYSQL_ROOT_PASSWORD=your_root_password - MYSQL_DATABASE=postfix - MYSQL_USER=postfix - MYSQL_PASSWORD=your_secure_password volumes: - /mnt/docker/mysql:/var/lib/mysql networks: - http_network redis: image: docker.xuanyuan.run/redis:6-alpine restart: always volumes: - /mnt/docker/redis:/data networks: - http_network traefik: image: docker.xuanyuan.run/traefik:v2.5 restart: always command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.email=admin@domain.tld" - "--certificatesresolvers.letsencrypt.acme.storage=/acme/acme.json" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock - /mnt/docker/traefik/acme:/acme networks: - http_network networks: http_network: external: true
| 变量 | 描述 | 类型 | 默认值 |
|---|---|---|---|
| VMAILUID | vmail 用户 ID | 可选 | 1024 |
| VMAILGID | vmail 组 ID | 可选 | 1024 |
| VMAIL_SUBDIR | ***子目录名称 | 可选 | |
| DKIM_KEY_LENGTH | DKIM RSA 密钥对长度 | 可选 | 1024 |
| DKIM_SELECTOR | DKIM 选择器 | 可选 | |
| DEBUG_MODE | 启用详细日志(postfix,dovecot,rspamd,unbound) | 可选 | false |
| PASSWORD_SCHEME | 密码加密方案 | 可选 | SHA512-CRYPT |
| DBDRIVER | 数据库类型:mysql, pgsql, ldap | 可选 | mysql |
| DBHOST | 数据库地址 | 可选 | mariadb |
| DBPORT | 数据库端口 | 可选 | 3306 / 389 (sql/ldap) |
| DBUSER | 数据库用户名 | 可选 | postfix |
| DBNAME | 数据库名称 | 可选 | postfix |
| DBPASS | 数据库密码(或密码文件路径) | 必选* | null |
| REDIS_HOST | Redis 地址 | 可选 | redis |
| REDIS_PORT | Redis 端口 | 可选 | 6379 |
| REDIS_PASS | Redis 密码(或密码文件路径) | 可选 | null |
| REDIS_NUMB | Redis 数据库编号 | 可选 | 0 |
| RSPAMD_PASSWORD | Rspamd WebUI 密码 | 必选 | null |
| ADD_DOMAINS | 额外域名(逗号分隔) | 可选 | null |
| RELAY_NETWORKS | 无需认证的中继网络 | 可选 | null |
| WHITELIST_SPAM_ADDRESSES | 垃圾邮件白名单地址 | 可选 | null |
| DISABLE_RSPAMD_MODULE | 禁用的 Rspamd 模块 | 可选 | null |
| DISABLE_CLAMAV | 禁用防病毒 | 可选 | false |
| DISABLE_SIEVE | 禁用 Sieve 协议 | 可选 | false |
| DISABLE_SIGNING | 禁用 DKIM/ARC 签名 | 可选 | false |
| DISABLE_GREYLISTING | 禁用灰名单 | 可选 | false |
| DISABLE_RATELIMITING | 禁用速率限制 | 可选 | true |
| DISABLE_DNS_RESOLVER | 禁用本地 DNS 解析器 | 可选 | false |
| DISABLE_SSL_WATCH | 禁用 SSL 证书监控 | 可选 | false |
| ENABLE_POP3 | 启用 POP3 协议 | 可选 | false |
| ENABLE_FETCHMAIL | 启用 Fetchmail | 可选 | false |
| ENABLE_ENCRYPTION | 启用 GPG 自动加密 | 可选 | false |
| FETCHMAIL_INTERVAL | Fetchmail 轮询间隔(分钟) | 可选 | 10 |
| RECIPIENT_DELIMITER | 收件人分隔符(单字符) | 可选 | + |
*DBPASS 在使用 LDAP 认证时不需要
工作原理
Zeyple 从 Postfix 队列捕获邮件,若找到收件人的 GPG 公钥则自动加密,然后将加密后的邮件放回队列。
启用自动加密
将环境变量 ENABLE_ENCRYPTION 设置为 true。公钥环存储在 /var/mail/zeyple/keys。
导入公钥
确保公钥已上传至 GPG 密钥服务器,然后执行:
bashdocker exec -ti mailserver encryption.sh import-key YOUR_KEY_ID
导入所有收件人公钥
浏览所有***目录并导入对应公钥:
bashdocker exec -ti mailserver encryption.sh import-all-keys
Let's Encrypt 证书(通过 Traefik)
/mnt/docker/traefik/acme:/etc/letsencrypt自定义证书
将证书文件放置在 /mnt/docker/mail/ssl/ 目录,命名规则:
fullchain.pemprivkey.pemchain.pem(可选)所需端口
启用 clamav-unofficial-sigs
mkdir -p /mnt/docker/mail/clamav-unofficial-sigs-v /mnt/docker/mail/clamav-unofficial-sigs:/etc/clamav-unofficial-sigs/mnt/docker/mail、数据库和 DKIM 密钥docker-compose.yml 中的镜像名称为 mailserver2/mailserver:latestdocker-compose up -d您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 mailserver2/mailserver 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: