
d3fk/mailman2 的轻量级Docker镜像(压缩后242Mb),集成mailman2、exim4邮件服务器和apache2 Web服务器,旨在提供稳定、便捷的邮件列表管理解决方案,支持通过Web界面创建和管理邮件列表。
Debian buster是仍提供mailman2软件包的最新Debian版本,本镜像利用这一特性,提供了包含邮件列表管理(mailman2)、邮件传输(exim4)和Web管理界面(apache2)的一体化容器,适合快速部署自用或组织级邮件列表服务。
推荐从Docker Hub拉取预构建镜像:
shdocker pull d3fk/mailman2
d3fk/mailman2:latest:自动构建(代码仓库更新或每周触发),包含最新安全修复和功能更新d3fk/mailman2:stable:基于稳定版本构建,代码冻结,适合生产环境Docker Hub仓库地址:[***]
通过环境变量自定义容器行为,常用变量如下:
| 变量名 | 描述 | 默认值 |
|---|---|---|
URL_HOST | Web界面访问域名(用于URL生成) | - |
EMAIL_HOST | 邮件列表域名(用于生成列表地址) | - |
MASTER_PASSWORD | 邮件列表管理员主密码 | "example" |
LIST_ADMIN | 列表管理员***地址(用于创建管理员账户) | - |
LIST_LANGUAGE_CODE | 默认语言代码 | "en"(英语) |
URL_ROOT | Web界面根路径(避免被爬虫识别),需以/结尾,空字符串表示根目录 | "lists/" |
URL_PATTERN | Web访问协议,可选"http"或"https" | "http" |
SSL_FROM_CONTAINER | 是否由容器提供HTTPS(启用mod_ssl并自动重定向80→443),字符串布尔值 | "false" |
SSL_SELFSIGNED | 当SSL_FROM_CONTAINER=true时,是否生成自签名证书(false则使用现有证书) | "false" |
ENABLE_SPF_CHECK | 是否启用SPF检查(防止邮件身份伪造),字符串布尔值 | "false" |
以下是基本部署命令,需根据实际DNS配置修改环境变量:
shdocker run --rm -d --name mailman \ --add-host mails.example.com:127.0.0.1 \ # 将EMAIL_HOST映射到本地 --hostname mails.example.com \ # 设置容器主机名(影响exim配置) -p 80:80 -p 25:25 -p 465:465 \ # 映射端口(根据需求调整) -e URL_HOST=lists.example.com \ # Web访问域名 -e EMAIL_HOST=mails.example.com \ # 邮件域名 -e LIST_ADMIN=*** \ # 管理员*** -e MASTER_PASSWORD="your_secure_password" \ # 管理员主密码 d3fk/mailman2
部署后查看容器日志,获取DKIM公钥和DNS配置信息:
shdocker logs mailman
日志末尾会显示DKIM TXT记录,需添加到DNS解析以启用DKIM验证。
为确保邮件正常发送和接收,需配置以下DNS记录:
| 记录类型 | 名称 | 内容说明 |
|---|---|---|
| A | URL_HOST | 指向容器所在服务器IP,用于Web界面访问 |
| A | EMAIL_HOST | 若URL_HOST与EMAIL_HOST不同,需单独配置A记录指向服务器IP |
| PTR | 服务器IP | 反向解析至EMAIL_HOST,用于邮件服务器身份验证 |
| MX | 域名 | 优先级最高的MX记录指向EMAIL_HOST,声明其为邮件接收服务器 |
| TXT | default._domainkey.EMAIL_HOST | DKIM公钥记录(从容器日志获取) |
| TXT | 域名 | SPF记录,例如:v=spf1 mx -all(允许MX记录指定的服务器发送邮件) |
| TXT | _dmarc.域名 | DMARC记录,例如:v=DMARC1; p=quarantine; sp=quarantine; adkim=s; aspf=s |
容器默认定义以下卷用于持久化关键数据,可通过Docker命名卷或主机目录挂载实现数据持久化:
| 卷路径 | 用途说明 |
|---|---|
/var/log/mailman | mailman日志 |
/var/log/exim4 | exim4邮件服务器日志 |
/var/log/apache2 | apache2 Web服务器日志 |
/var/lib/mailman/archives | 邮件列表归档数据 |
/var/lib/mailman/lists | 邮件列表配置和成员数据 |
/etc/exim4/tls.d | DKIM证书和TLS配置 |
持久化示例(使用主机目录挂载):
shdocker run --rm -d --name mailman \ --add-host mails.example.com:127.0.0.1 \ --hostname mails.example.com \ -p 80:80 -p 443:443 -p 25:25 \ -e URL_HOST=lists.example.com \ -e EMAIL_HOST=mails.example.com \ -e LIST_ADMIN=*** \ -e MASTER_PASSWORD="secure_pw" \ -e URL_PATTERN="https" \ -e SSL_FROM_CONTAINER="true" \ -e SSL_SELFSIGNED="true" \ -v $(pwd)/mailman-lists:/var/lib/mailman/lists \ # 挂载邮件列表数据 -v $(pwd)/dkim-cert:/etc/exim4/tls.d \ # 挂载DKIM证书 d3fk/mailman2
容器支持三种HTTPS配置方式:
外部HTTPS终结(推荐)
URL_PATTERN="https" + SSL_FROM_CONTAINER="false",由反向代理/负载均衡器(如Nginx、Traefik)管理SSL证书,容器通过HTTP与代理通信。
容器自签名证书
URL_PATTERN="https" + SSL_FROM_CONTAINER="true" + SSL_SELFSIGNED="true",容器自动生成自签名证书(适合测试,生产环境不推荐)。
自定义SSL证书
URL_PATTERN="https" + SSL_FROM_CONTAINER="true" + SSL_SELFSIGNED="false",通过卷挂载自定义证书至容器:
sh-v /path/to/your/cert.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem \ -v /path/to/your/key.pem:/etc/ssl/private/ssl-cert-snakeoil.key \
容器暴露以下端口,可根据需求映射至主机:
| 容器端口 | 用途 | 建议映射场景 |
|---|---|---|
| 80 | HTTP Web界面 | 未启用HTTPS时使用 |
| 443 | HTTPS Web界面 | 启用容器HTTPS或自定义证书时 |
| 25 | SMTP(邮件接收) | 需开放至互联网以接收外部邮件 |
| 465 | SMTPS(TLS直连) | 用于客户端TLS加密发送邮件 |
| 587 | SMTPS(标准提交端口) | 替代465的标准加密邮件端口 |
代码仓库提供compose.yaml模板,可通过环境变量文件(.env)配置参数:
yaml# compose.yaml示例 version: '3' services: mailman: image: d3fk/mailman2 container_name: mailman hostname: ${EMAIL_HOST} extra_hosts: - ${EMAIL_HOST}:127.0.0.1 ports: - "80:80" - "443:443" - "25:25" environment: - URL_HOST=${URL_HOST} - EMAIL_HOST=${EMAIL_HOST} - LIST_ADMIN=${LIST_ADMIN} - MASTER_PASSWORD=${MASTER_PASSWORD} - URL_PATTERN=https - SSL_FROM_CONTAINER=true - SSL_SELFSIGNED=false volumes: - ./lists:/var/lib/mailman/lists - ./dkim:/etc/exim4/tls.d - ./ssl-cert.pem:/etc/ssl/certs/ssl-cert-snakeoil.pem - ./ssl-key.pem:/etc/ssl/private/ssl-cert-snakeoil.key restart: unless-stopped
代码仓库k8s目录提供Deployment、Service等资源模板,支持通过ConfigMap/Secret注入环境变量和证书,适合生产环境规模化部署。
--hostname影响exim4的primary_hostname配置,建议设为EMAIL_HOSTENABLE_SPF_CHECK=true时,确保容器能获取发件人真实IP(非代理IP)本项目基于MIT许可证开源。






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务