☰
Mailu 项目全解析:以 Docker 镜像集形态交付的一体化开源邮件服务器
2026/9/28 7:50:07 网站建设 项目流程
  • 后端
  • 通信

【免费下载链接】Mailu

Insular email distribution - mail server as Docker images

项目地址:https://gitcode.com/gh_mirrors/ma/Mailu
点击查看免费下载

Mailu 是一个以"一组 Docker 镜像"为交付形态的轻量而全功能的邮件服务器。本文基于仓库根目录的 README 展开,结合core/、docs/、setup/等目录中的源码与配置文件,系统梳理 Mailu 的功能矩阵、容器架构、部署配置与安全机制,帮助读者理解其设计取舍,并掌握从零部署与调优的完整路径。

项目定位:邮件服务器即一组 Docker 镜像

Mailu 的自我定位清晰而克制:simple yet full-featured——简单但功能完整。它不是又一个重量级群件套件,而是聚焦于邮件核心业务(收发、转发、过滤、管理),并且刻意"不内置专有软件、不附带与邮件无关的功能"。

README 用两句话概括了它的哲学:

It is free software (both as in free beer and as in free speech), open to suggestions and external contributions. The project aims at providing people with an easily setup, easily maintained and full-featured mail server while not shipping proprietary software nor unrelated features often found in popular groupware.

即:自由软件(免费且开源)、欢迎外部贡献、追求"易部署、易维护、功能完整",同时拒绝大多数群件套件常见的臃肿与专有组件。

这一理念直接体现在仓库结构上:所有组件都位于 core/ 与 optional/ 目录下,每个子目录对应一个独立容器镜像,彼此通过环境变量与网络通信解耦。

功能矩阵:README 中列出的六大能力逐项拆解

README 的 Features 部分是整份文档的技术骨架。以下结合仓库实际实现,逐条展开:

1. 标准邮件协议服务:IMAP / IMAP+ / SMTP / Submission

  • IMAP 与 IMAP+:由 core/dovecot/ 提供,容器内默认监听 143(明文)与 993(TLS)端口,docs/compose/docker-compose.yml 中 front 容器向宿主机暴露了这些端口。Dovecot 还承担了配额管理、全文检索(见后文)与 managesieve 脚本支持。
  • SMTP 与 Submission:由 core/postfix/ 提供,监听 25(SMTP)、465(SMTPS)、587(Submission)端口。MESSAGE_SIZE_LIMIT等参数直接作用于 postfix 的message_size_limit配置。
  • 客户端自动配置:README 强调 "auto-configuration profiles for clients"。这一能力由 core/admin/mailu/internal/views/autoconfig.py 实现——Mailu 会为 Thunderbird 等客户端提供autoconfig配置档,让客户端无需手工填写服务器参数即可完成 IMAP/SMTP 设置。

2. 高级邮件功能:别名、域别名、自定义路由、附件全文检索

  • 别名(Alias)与域别名(Alternative/Domain Alias):管理界面中分别对应 alias 与 alternative 两个资源,core/admin/mailu/models.py 中的Alias、Alternative模型承载其数据结构,core/admin/mailu/ui/views/aliases.py 提供增删改查视图。
  • 自定义路由(Custom routing):通过域级与别名级的目标地址配置,可将特定地址的邮件转发到外部邮箱或本域其他地址,对应模型中的destination字段。
  • 附件全文检索:FULL_TEXT_SEARCH配置项(默认en)控制 Dovecot FTS(full-text search)支持的语言列表,可设为off关闭以节省性能;FULL_TEXT_SEARCH_ATTACHMENTS则控制是否启用 Tika 对附件内容做 OCR/文本抽取,实现真正的"附件全文检索"。相关说明见 docs/configuration.rst。

3. Web 访问:多 Webmail 与统一管理界面

Mailu 提供三套 Web 入口:

  • 管理界面(Admin UI):由 core/admin/ 提供,默认路径/admin,覆盖用户、域、别名、中继、Token、管理员与公告的全量管理,README 中嵌入了域管理界面的截图:

  • Webmail:支持 webmails/roundcube/ 与 webmails/snappymail/ 两种实现,通过WEBMAIL变量选择(roundcube/snappymail/none)。

  • RESTful API:默认路径/api,由 core/admin/mailu/api/v1/ 实现,提供域、别名、用户、中继、Token 等资源的 JSON 接口,依赖API_TOKEN进行认证(见 docs/configuration.rst)。

4. 用户自助功能:别名、自动回复、自动转发、外部账户拉取、ManageSieve

  • 自动回复(Auto-reply)与自动转发(Auto-forward):在用户管理界面中配置,对应 core/admin/mailu/ui/views/users.py 中 reply 与 forward 相关逻辑,底层由 Dovecot Sieve 脚本执行。
  • 外部账户拉取(Fetched accounts):由 optional/fetchmail/ 提供,FETCHMAIL_ENABLED(默认 True)开启后可在管理界面配置从外部邮箱拉取邮件,FETCHMAIL_DELAY(默认 600 秒)控制轮询间隔——过短会被外部服务封禁,过长则收件不及时。
  • ManageSieve:用于管理用户端过滤脚本,Roundcube 默认启用managesieve插件(见 docs/configuration.rst 的默认插件列表)。

5. 管理员功能:全局管理员、公告、域委派、配额

  • 全局管理员:admin@domain用户拥有全局权限,可通过INITIAL_ADMIN_*系列变量在首次部署时自动创建(create/ifmissing/update三种模式,见 docs/configuration.rst)。
  • 公告(Announcements):管理员可在管理界面发布全局公告,模板位于 core/admin/mailu/ui/templates/announcement.html。
  • 按域委派(Per-domain delegation):domain_admin角色允许将某个域的管理权委托给非全局管理员用户,相关访问控制逻辑在 core/admin/mailu/ui/access.py 中统一处理。
  • 配额(Quotas):支持全局DEFAULT_QUOTA与按域覆盖,由 Dovecot 强制执行。

6. 安全能力:TLS、DANE、MTA-STS、Let's Encrypt、DKIM、杀毒、恶意附件拦截

  • 强制 TLS 与证书管理:TLS_FLAVOR决定证书获取方式,支持letsencrypt、cert(自定义证书)、notls。Let's Encrypt 模式下由 core/nginx/certwatcher.py 与 core/nginx/letsencrypt.py 自动申请并续期证书,证书落在$ROOT/certs目录供 nginx、dovecot、postfix 共用。另有TLS_PERMISSIVE(默认 true)控制 25 端口 STARTTLS 的兼容性取向。
  • DANE 与 MTA-STS:由 postfix 的outbound_tls_level与 mta-sts 守护进程实现,core/postfix/conf/mta-sts-daemon.yml 是其配置文件;DEFER_ON_TLS_ERROR控制策略不完整时是否延迟投递。
  • 出站 DKIM:私钥由管理端生成并存放于$ROOT/dkim,rspamd 的 dkim_signing.conf 负责出站签名。
  • 杀毒(Antivirus):ANTIVIRUS变量可选clamav或none;ANTIVIRUS_ACTION决定检出病毒后的行为——discard(默认,静默丢弃)或reject(SMTP 对话期拒绝)。
  • 恶意附件拦截(Snuffleupagus / oletools):SCAN_MACROS(默认 True)启用后,Mailu 使用 oletools 的 mraptor 检测 Office 文档中的恶意宏,相关实现在 core/oletools/start.py。

7. 反垃圾能力:自动学习、灰名单、DMARC/SPF、防伪造

  • Rspamd 内核:反垃圾全部由 core/rspamd/ 承担,conf 目录下包含 antivirus.conf(杀毒联动)、arc.conf、dmarc.conf、multimap.conf(黑白名单映射)等。
  • 自动学习(Auto-learn):基于 Bayes 分类器,classifier-bayes.conf 配置训练与阈值,dovecot 侧的 ham.script 与 spam.script 支持用户在客户端侧"标记为垃圾/非垃圾"回流训练。
  • 灰名单(Greylisting):由 greylist.conf 实现。
  • DMARC 报告:DMARC_RUA/DMARC_RUF定义报告接收地址;DMARC_SEND_REPORTS(默认 false)启用后由 Rspamd 每天凌晨 2 点自动生成并发送前一天的 DMARC 聚合报告。
  • 防伪造(Anti-spoofing):SPF/DKIM/DMARC 联合校验 +WILDCARD_SENDERS白名单机制——默认禁止用户冒用任意地址发信,只有列入该列表的地址才被允许伪造发件人。

8. 自由与隐私:全 FOSS 组件、无追踪器

README 特别强调 "Freedom, all FOSS components, no tracker included"。整个组件栈(nginx、Dovecot、Postfix、Rspamd、Roundcube/SnappyMail、ClamAV、oletools、Redis)均为开源软件,DISABLE_STATISTICS变量允许用户选择退出匿名统计上报(setup/flavors/compose/mailu.env)。

容器架构与编排方式

Mailu 的"一组 Docker 镜像"具体指哪些容器?docs/compose/docker-compose.yml 与 setup/flavors/compose/docker-compose.yml 给出了标准编排:

服务镜像职责主要数据卷
frontmailu/nginx:$VERSION统一入口,反向代理 + SMTP/IMAP 端口转发$ROOT/certs
redisredis:alpine会话、限流与队列缓存$ROOT/redis
imapmailu/dovecot:$VERSIONIMAP/POP3、配额、全文检索$ROOT/mail
smtpmailu/postfix:$VERSIONSMTP 收发、转发、队列$ROOT/mailqueue
antispammailu/rspamd:$VERSION垃圾过滤、DKIM 签名$ROOT/filter、$ROOT/dkim
antivirusmailu/$ANTIVIRUS:$VERSION病毒扫描(clamav 或 none)$ROOT/filter
webdavmailu/$WEBDAV:$VERSIONCardDAV/CalDAV(radicale 或 none)$ROOT/dav
adminmailu/admin:$VERSION管理界面 + RESTful API$ROOT/data、$ROOT/dkim
webmailmailu/$WEBMAIL:$VERSIONWeb 邮箱(roundcube/snappymail)$ROOT/webmail
fetchmailmailu/fetchmail:$VERSION外部邮箱拉取—

几个值得注意的设计细节:

  • 端口集中暴露:所有对外端口(80/443/110/143/993/995/25/465/587)全部由front容器统一暴露,内网服务间通过 Docker 网络互访,简化了防火墙管理。
  • 覆盖层(overrides)机制:nginx、dovecot、postfix、rspamd 均支持只读挂载$ROOT/overrides/<服务>目录,实现"不改镜像、只加配置"的定制方式。
  • 可插拔可选组件:ANTIVIRUS、WEBMAIL、WEBDAV、SCAN_MACROS均为可开关变量,README 中"不含无关功能"的理念在此落地——不需要的功能直接不部署对应容器。
  • 编排灵活性:除 Docker Compose 外,仓库还提供 Kubernetes 部署文档(docs/kubernetes/mailu/index.rst),以及为复制部署设计的目录结构 RFC(design/mailu-directory-structure.md),该 RFC 将$ROOT划分为config(可复制共享)、data(仅本地)、local(仅本地)与mail(需分布式文件系统)四类存储。

部署要点:版本选择、环境要求与关键配置

版本选择

根据 docs/setup.rst 的说明:

  • 2024.06等日期版本:最新稳定版,推荐新部署使用;
  • 1.0/1.1等旧分支:不再接受补丁,建议尽快迁移;
  • latest:master 开发分支的最新构建,仅建议用于测试环境,切勿用于生产。

硬件与环境要求

  • 镜像支持linux/amd64、linux/arm64v8、linux/armv7多架构;x86_64 平台要求 CPU 支持SSE4.2指令集(部分 2013 年前的 Intel Atom 不满足)。
  • 内存要求(docs/compose/requirements.rst):启用 ClamAV 时至少3GB 内存 + 1GB swap;不启用时1GB 内存 + 1GB swap。
  • 需要准备一个主域名与用于收信的 DNS 名称,并完成 MX、SPF、DKIM、DMARC 记录配置。
  • 推荐在部署后先自测:向外部服务发信并验证 DKIM/SPF 通过、接收外部来信、用docker compose logs -f <服务名>检查日志、用开放中继检测工具确认未成为垃圾邮件源。

核心配置项(mailu.env)

配置文件由安装向导自动生成,位于setup/flavors/compose/mailu.env,docs/configuration.rst 提供了完整参考。以下是最关键的几组:

通用配置

  • SECRET_KEY:必须改为随机生成的 16 字节值,用于保护认证 Cookie 等关键用途,可用pwgen 16 1生成;
  • DOMAIN:主邮件域,用于退信、postmaster 地址等技术性地址;
  • HOSTNAMES:所有公共主机名,第一个为主机名(对外暴露 SMTP/IMAP);
  • SUBNET:Docker 网络地址段,需避免与系统内外网冲突;
  • POSTMASTER:postmaster 地址的本地部分,建议设为通用值后配置别名;
  • TLS_FLAVOR:证书获取方式(letsencrypt/cert/notls)。

安全限流(docs/configuration.rst)

  • AUTH_RATELIMIT_IP(默认 5/小时):同一 IP 子网(IPv4 /24、IPv6 /48)对不存在的账户的认证尝试上限,用于抵御密码喷洒攻击;
  • AUTH_RATELIMIT_USER(默认 50/天):单账户的认证尝试上限,用于抵御暴力破解(同一账户同一密码的多次尝试只计一次);
  • AUTH_RATELIMIT_EXEMPTION_LENGTH(默认 86400):成功登录后该 IP 的豁免秒数,避免 NAT 场景误伤;
  • AUTH_RATELIMIT_EXEMPTION:豁免的 CIDR 列表,设0.0.0.0/0, ::/0即完全关闭限流。

邮件行为

  • MESSAGE_SIZE_LIMIT:单封邮件大小上限(默认 50MB,附件上限约为其 2/3);
  • MESSAGE_RATELIMIT(默认 200/天)与MESSAGE_RATELIMIT_EXEMPTION:单用户出站量限制,用于抑制被攻陷账户的滥发;
  • RELAYNETS:免认证中继网段,使用需极度谨慎,配置失误会变成开放中继;
  • RELAYHOST/RELAYUSER/RELAYPASSWORD:将全部出站邮件交由 smarthost 转发的配置;
  • RECIPIENT_DELIMITER(默认+):启用localpart+tag@domain式地址,便于按标记归类邮件;
  • FULL_TEXT_SEARCH:全文检索语言列表或off;
  • COMPRESSION(gz/bz2/zstd)与COMPRESSION_LEVEL:邮件落盘压缩。

Web 与高级配置

  • WEB_ADMIN/WEB_WEBMAIL/WEB_API(默认/admin、/webmail、/api)与WEBROOT_REDIRECT(根路径重定向目标,需指向已启用服务);
  • API_TOKEN:RESTful API 的必填认证令牌(最短 3 字符,通过请求头传递);
  • CREDENTIAL_ROUNDS(默认 13):口令哈希轮数,兼顾安全与性能;
  • SESSION_COOKIE_SECURE(默认 True)与SESSION_TIMEOUT(默认 3600)、PERMANENT_SESSION_LIFETIME(默认 108000):会话安全策略;
  • REAL_IP_HEADER/REAL_IP_FROM:反向代理场景下信任客户端真实 IP 的配置,只设前者不设后者存在 IP 伪造漏洞;
  • PROXY_PROTOCOL:启用 PROXY protocol 的端口列表(需同时配置REAL_IP_FROM且必须清空REAL_IP_HEADER);
  • PORTS(默认25,80,443,465,993,995,4190):启用的端口集合,25/465/993 不可禁用。

数据库配置(docs/configuration.rst)

  • 默认使用 SQLite(sqlite:////data/main.db,Roundcube 为sqlite:////data/roundcube.db),对单机部署足够且更可靠;
  • 可选 PostgreSQL(驱动postgresql)或 MariaDB/MySQL(驱动mysql+mysqlconnector),但官方建议保持 SQLite。

首次管理员创建

部署后需要管理员账户,可通过环境变量自动创建(docs/configuration.rst):

INITIAL_ADMIN_ACCOUNT=me INITIAL_ADMIN_DOMAIN=example.net INITIAL_ADMIN_PW=password INITIAL_ADMIN_MODE=ifmissing # create(默认)/ ifmissing / update

官方建议使用ifmissing或update,保留默认的create会在系统重启时因账户已存在而报错。

许可证与贡献方式

Mailu 采用MIT 许可证(LICENSE.md),README 明确说明所有组件均为自由软件且与 MIT 兼容,仓库中所有特定配置文件、Dockerfile 与代码均置于 MIT 许可之下。贡献者需遵循 CONTRIBUTING.md 与 CODE_OF_CONDUCT.md 中的流程与行为规范;变更记录采用 towncrier 管理(见 towncrier/newsfragments/),每个改动对应一个 newsfragment 文件,便于生成结构化的 CHANGELOG.md。

对于希望先体验再部署的读者,Mailu 提供了演示服务器(docs/demo.rst):test.mailu.io每日三次自动重置,开放 IMAP/POP3/SMTP、Webmail、Admin UI 与 RESTful API 的完整功能,但 SMTP 出站被禁用(防止滥用),且容器资源受限——适合功能验证,不适合作为性能基准。

总结

从 README 这份"功能宣言"出发,可以看到 Mailu 的设计主线:用一组职责单一的开源容器,拼装出一个覆盖收发、过滤、管理、Web 访问全链路的邮件服务器,同时把每个可选组件都做成可开关的变量,将复杂度封装在配置文件中。无论是家庭自建邮箱、小型团队邮件服务,还是需要深度定制的企业场景,都可以基于这套镜像集快速起步,并通过overrides覆盖层与*_ADDRESS服务发现变量逐步演进到更复杂的编排环境。

  • 后端
  • 通信

【免费下载链接】Mailu

Insular email distribution - mail server as Docker images

项目地址:https://gitcode.com/gh_mirrors/ma/Mailu
点击查看免费下载

相关推荐

上一篇:OpenMMO服务器为什么区分不出AI玩家?设计哲学与实现分析
下一篇:React Bits完整教程:5分钟掌握动画组件库终极配置

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询