Mailu 2024.06.65 配置参数详解

Mailu 2024.06 集中式配置文件 mailu.env 逐组详解:通用/邮件/Web/管理员自动创建/高级/反病毒/数据库与 Webmail 八组参数的默认值与生效机制,配套参数级实测验证(TLS 证书、250-SIZE、PORTS 587、自动建号、API_TOKEN、RECIPIENT_DELIMITER 扩展地址投递)。

Mailu邮件服务器2026/10/21

Mailu 2024.06.65 配置参数详解

目标:逐一解析 Mailu 2024.06 集中式配置文件 mailu.env 的关键参数——按官方配置参考(mailu.io/2024.06/configuration.html)的分组展开,标注默认值、生效机制与踩坑点,并对 2024.06.65 实际部署做参数级实测验证(证书回显、端口行为、自动建号、扩展地址投递等)。与《Mailu Docker Compose 部署指南》配套阅读;组件背景与同类对比见《Mailu 2024.06.65 介绍与选型指南》。

一、环境信息

  • Mailu:2024.06.65(2024.06 稳定分支锁定版)
  • 操作系统:Ubuntu 22.04(x86_64);部署形态与目录、端口规划见本专栏部署指南篇
  • 参数依据:官方配置参考 https://mailu.io/2024.06/configuration.html(查询日期 2026-10-21),逐组与本地部署文件交叉核对
  • 实测环境:本专栏部署指南篇搭建的 mail.example.com(主域 example.com)服务栈,网络段 10.89.56.0/24

二、配置体系总览

Mailu 的全部服务配置收敛在一份 mailu.env:服务栈内每个服务启动时读取同一份文件(部署指南篇 4.3 节的 env_file 挂载方式),因此"改一处、管全栈"。要点:

  • 修改生效方式:mailu.env 在服务启动时读取,改完必须重建服务(docker compose up -d 会自动重建受影响服务);仅 restart 不会重新读取。部署指南篇第十章 Q4 有实测记录。
  • 参数优先级:mailu.env 为全局值;部分能力支持用户/域级覆盖(如垃圾分阈值 spam_threshold 存在用户属性,DEFAULT_SPAM_THRESHOLD 只管新用户初始值)。
  • 本地覆盖通道:各服务的 /overrides 目录可覆盖服务内配置文件(Postfix main.cf、Dovecot conf.d 等),见部署指南篇第七章;mailu.env 管不到的细节走这条通道。
  • 官方参数清单:官方配置参考明确说明 "This page explains the variables found in mailu.env"——本文按其原始分组(Common / Mail settings / Web settings / Admin account - automatic creation / Advanced settings / Antivirus settings / Database settings / Webmail settings / Header authentication)整理。

三、通用组(Common configuration)

参数默认值说明
SECRET_KEY无(必填)16 字节随机串,用于登录态 Cookie 签名等关键加密用途,官方要求每套部署必须更换(pwgen 16 1 或 openssl rand -base64 12 生成);更换后所有已登录会话失效
DOMAIN无(必填)主邮件域:退信发件人、postmaster 等技术地址都用它生成
HOSTNAMES无(必填)对外主机名列表(逗号分隔),第一个为主主机名,SMTP/IMAP 对外报文中的名字与它对应;自签/申请证书的 CN/SAN 应覆盖它
SUBNET无(必填)服务栈网络地址段(官方原文 "defines the address range of the docker network used by Mailu"),必须与编排文件里的网桥子网一致,否则服务互访异常;与宿主已用网段冲突时才需修改
POSTMASTER无(必填)postmaster 技术地址的本地部分,官方建议配一个通用值并用别名转发
TLS_FLAVOR无(必填)证书获取策略五选一:letsencrypt(自动签发+续期)、mail-letsencrypt(仅邮件端口用 LE)、cert(自带证书,读 /certs/cert.pem+key.pem)、mail(仅邮件端口用自带证书)、notls(不加密,不建议)
AUTH_RATELIMIT_IP5/hour按 IP 网段的认证限速(防密码喷洒),网段粒度由 AUTH_RATELIMIT_IP_V4_MASK(默认 /24)与 AUTH_RATELIMIT_IP_V6_MASK(默认 /48)控制
AUTH_RATELIMIT_USER50/day按账号的认证尝试限速(防爆破);同账号同口令的重复尝试只计一次
AUTH_RATELIMIT_EXEMPTION_LENGTH86400成功登录后该 IP 免限速的秒数(照顾 NAT 后多用户)
AUTH_RATELIMIT_EXEMPTION空完全免限速的网段 CIDR 列表(配 0.0.0.0/0 等于关闭限速,慎用)
DEFAULT_SPAM_THRESHOLD80新用户默认垃圾分容忍度(Rspamd 分值),用户属性可单独调整
DISABLE_STATISTICSFalse是否关闭匿名统计上报,在意隐私可设 True
WILDCARD_SENDERS空允许"冒充任意发件人"的用户地址列表(spoofing 白名单),仅在确有系统发信需求时配置
TZEtc/UTC时区(Region/City 格式)。官方警告:如发现日志时间与远端 MTA 对不上,官方建议改宿主为 UTC 而不是改 TZ——UTC 最利于跨服务器日志比对

⚠️ TZ 实测:本部署设 Asia/Shanghai 后,服务内时间显示 Wed Oct 21 09:33:32 CST 2026(与宿主一致)。若追求日志关联性,公网部署建议保持默认 UTC。

四、邮件设置组(Mail settings)

参数默认值说明
MESSAGE_SIZE_LIMIT50000000单封邮件大小上限(字节);过大易被塞垃圾撑爆磁盘,过小丢合法邮件。实测生效证据:25 端口 EHLO 回显 250-SIZE 50000000
MESSAGE_RATELIMIT200/day单用户日发信上限(防账号被盗后批量外发);豁免账号列表 MESSAGE_RATELIMIT_EXEMPTION
RELAYNETS空免认证中继网段(逗号分隔),配错就是开放中继,官方原文警告 "This should be used with great care… may turn your Mailu instance into an open-relay!"
RELAYHOST空全部出站邮件走指定 smarthost,格式 [HOST]:PORT;需要认证时配 RELAYUSER/RELAYPASSWORD
OUTBOUND_TLS_LEVEL空(opportunistic TLS)出站 TLS 策略,可设 encrypt/secure;用支持 TLS 的中继时官方建议显式加密
DEFER_ON_TLS_ERRORTrueDANE/MTA-STS 附加校验失败时是否缓发邮件
INBOUND_TLS_ENFORCEFalse入站强制 STARTTLS。官方明确警告不要开启(违反 RFC 3207,会导致不支持 STARTTLS 的老服务器无法投递进来)
SCAN_MACROSTrue宏邮件拦截(基于 oletools/mraptor 识别恶意宏文档);部署指南篇因未启用该可选能力设为 false
FETCHMAIL_ENABLEDTrue启用外域邮箱拉取功能(管理界面显示该项);注意官方原文指出该服务需在编排中额外部署才真正生效
FETCHMAIL_DELAY600fetchmail 拉取间隔秒数:太短容易被外部服务拉黑,太长收信不及时
RECIPIENT_DELIMITER+本地部分与扩展部分的分隔字符(可设多个如 +-),用于无限子地址
DMARC_RUA / DMARC_RUF空DMARC 聚合报告/失败报告邮箱的本地部分(如 admin → admin@DOMAIN)
FULL_TEXT_SEARCHenIMAP 全文检索语言列表(逗号分隔语言代码),设 off 关闭(性能敏感场景)
DEFAULT_QUOTA空域未单独配置配额时,新邮箱的默认配额
COMPRESSION空邮件落盘压缩算法:gz/bz2/zstd;官方建议:文件系统原生压缩(如 ZFS/btrfs)更高效,就别用它
COMPRESSION_LEVEL6压缩级别
PORTS25,80,443,465,993,995,4190front 启用的协议端口清单。IMAP(143)/POP3(110)/Submission(587) 默认关闭,需要时追加 110,143,587;官方明确 25/465/993 不可禁用。实测踩坑详见部署指南篇第十章 Q1

💡 RECIPIENT_DELIMITER 实测:默认 + 生效时向 user1+news@example.com 投递,服务器回 250 2.0.0 Ok: queued as CE9B78C2280,随后 IMAPS 登录 user1 查询 SEARCH ALL 返回 * SEARCH 1 2 3(含原两封共三封)——扩展地址正确落进 user1 主信箱。

五、Web 设置组(Web settings)

参数默认值说明
WEB_ADMIN/admin管理界面路径
WEB_WEBMAIL/webmailWebmail 路径
WEB_API/apiRESTful API 路径(Swagger UI 挂在其下,如 /api/v1/swagger.json)
WEBROOT_REDIRECT/webmail根路径跳转目标;设空则未匹配路径返回 404;设 none 表示用 Nginx override 自管 location /
SITENAMEMailu站点名(管理台/Webmail 菜单展示)
WEBSITE空面板菜单外链站点 URL
LOGO_URL / LOGO_BACKGROUND空自定义 Logo 与背景色

官方注意事项:以上路径都必须以 / 开头;WEBROOT_REDIRECT 不能指向未启用的功能(如 WEBMAIL=none 时指向 /webmail 会 404)。

💡 路径联动实测:部署篇 WEBROOT_REDIRECT=/admin 生效后,访问 https://127.0.0.1:8132/ 返回 308 -> https://127.0.0.1:8132/admin/?homepage,未登录最终落到统一登录页 /sso/login(HTTP 200)。

六、管理员自动创建组(Admin account - automatic creation)

参数默认值说明
INITIAL_ADMIN_ACCOUNT无初始管理员本地部分
INITIAL_ADMIN_DOMAIN无所属域(一般与 DOMAIN 相同)
INITIAL_ADMIN_PW无初始口令
INITIAL_ADMIN_MODEcreate创建策略三选一:create(已存在则报错)、ifmissing(不存在才建)、update(不存在则建/存在则改口令)

官方明确建议用 ifmissing 或 update:默认的 create 在每次重启服务时都会因账号已存在而抛异常。

⚠️ 自动建号实测:部署篇首次启动后,admin 日志输出 INFO:root:Creating initial admin account admin@example.com with mode ifmissing,全局管理员与所属域随之自动落库(CLI config-export user.email user.global_admin 可见 admin@example.com / global_admin: true);重启后不重复创建,幂等。

七、高级设置组(Advanced settings)

参数默认值说明
AUTH_REQUIRE_TOKENSFalse强制桌面客户端用应用专用令牌登录(不允许主口令),安全增强项
API_TOKENNoneRESTful API 的 Bearer 令牌,最短 3 字符,用 API 必配。实测:带令牌请求 GET /api/v1/domain 返回 200,不带返回 401
CREDENTIAL_ROUNDS12口令哈希轮数,调大增强抗离线破解、调小加快认证
SESSION_COOKIE_SECURETrue管理台 Cookie 的 secure 标志;仅纯 HTTP 访问管理台时才可关闭
SESSION_TIMEOUT3600会话空闲超时(秒)
PERMANENT_SESSION_LIFETIME108000会话最长存活(秒)
LOG_LEVELWARNING启动脚本的日志阈值(CRITICAL/ERROR/WARNING/INFO/DEBUG/NOTSET)
LETSENCRYPT_SHORTCHAINFalseTLS 握手是否发送 ISRG Root X1 短证书链(兼容 Android 7.1.1 以下,但降低现代设备性能)
TLS_PERMISSIVEtrue25 端口 STARTTLS 的密码套件是否保持最大兼容。官方强烈建议不要改("any encryption beats no encryption");收紧会导致老服务器退信/明文/静默丢信
REAL_IP_HEADER / REAL_IP_FROM空信任的反代头(如 X-Forwarded-For)与可信代理 IP 列表;只设前者不设后者是安全漏洞(可伪造源地址)。反代场景两个都要设
PROXY_PROTOCOL空front 启用 PROXY protocol 的端口列表;必须同时配 REAL_IP_FROM 且不能配 REAL_IP_HEADER,否则代理会被限速/封禁
PROXY_AUTH_WHITELIST空外部代理统一认证(header 认证)的可信代理 CIDR,需同时出现在 REAL_IP_FROM;配套 PROXY_AUTH_HEADER(默认 X-Auth-Email)、PROXY_AUTH_CREATE(自动建号,注意不会自动建域)、PROXY_AUTH_LOGOUT_URL
COMPOSE_PROJECT_NAMEmailu服务栈项目名前缀;多套 Mailu 并存时用它区分
DOMAIN_REGISTRATIONFalse是否允许用户自助注册域名(管理员在 UI 里看到注册开关)
MASKED_NETWORKS空日志中打码的网段(隐私合规用)
SQLALCHEMY_DATABASE_URIsqlite:////data/main.db管理库连接串;SQLALCHEMY_DATABASE_URI_ROUNDCUBE(默认 sqlite:////data/roundcube.db)同理

⚠️ API_TOKEN 实测:配置 API=true + API_TOKEN=q1w2e3r4 后——

$ curl -sk -o /dev/null -w '%{http_code}\n' https://127.0.0.1:8132/api/v1/domain
401
$ curl -sk -H 'Authorization: q1w2e3r4' -o /dev/null -w '%{http_code}\n' https://127.0.0.1:8132/api/v1/domain
200

八、反病毒组(Antivirus settings)

参数默认值说明
ANTIVIRUSclamav杀毒方案选择(clamav/none);不启用 ClamAV 时内存需求从 3GB 降到 1GB(官方 requirements 页口径)
ANTIVIRUS_ACTIONdiscard查出病毒的处理动作:discard(静默丢弃,发件方以为发成功)/ reject(SMTP 对话阶段拒收,发件方收到拒信)

九、数据库与 Webmail 组

  • 数据库:admin 与 Roundcube 均默认 SQLite。官方态度原文:"the development team recommends against it(换 PostgreSQL/MariaDB). Indeed, there is currently very little data to be stored and SQLite is deemed both sufficient, simpler and more reliable overall."——不要为"看起来更专业"换库;确需外接时用 SQLALCHEMY_DATABASE_URI=postgresql://... 或 mysql+mysqlconnector://...。
  • Webmail(Roundcube)插件:ROUNDCUBE_PLUGINS 控制插件清单,默认启用 archive, carddav, enigma, mailu, managesieve, markasjunk, zipdownload;设为 mailu 可禁用全部插件。插件级配置经 overrides/roundcube/*.inc.php 覆盖。

十、参数修改与生效指南

  1. 改 mailu.env → docker compose up -d(自动重建受影响服务)→ docker compose ps 观察健康状态;
  2. 改 overrides → docker compose up -d --force-recreate <服务>;
  3. 升级版本号 → 改编排文件内各服务的版本号(如 2024.06.65 → 下一锁定版)与 COMPOSE_PROJECT_NAME → docker compose pull && docker compose up -d;
  4. 验证参数生效的三个抓手:SMTP 侧看 EHLO 能力串(SIZE/STARTTLS)、Web 侧看响应码与跳转(curl -w '%{http_code} %{redirect_url}')、数据侧用 flask mailu config-export 核对落库值。

十一、常见问题

Q1:改了参数但行为没变? 见部署指南篇 Q4:env_file 只在服务重建时读取,restart 不够,必须 up -d 重建。

Q2:INITIAL_ADMIN_MODE=create 让服务重启报错? 换 ifmissing/update(官方建议),或删掉这组变量改用 CLI flask mailu admin 手动创建。

Q3:WEBROOT_REDIRECT=/webmail 后根路径 404? WEBMAIL=none 时 /webmail 路径不存在——跳转目标必须指向已启用的功能。

Q4:开了 REAL_IP_HEADER 反而限流误伤? 只设 header 不设 REAL_IP_FROM 等于允许伪造来源。两个参数必须成对设置;用 PROXY protocol 时则必须 REAL_IP_HEADER 保持为空。

Q5:AUTH_RATELIMIT_IP 默认 5/hour 太紧把真实用户挡了? 用 AUTH_RATELIMIT_EXEMPTION(网段白名单)或调大 AUTH_RATELIMIT_EXEMPTION_LENGTH(成功登录后免限速窗口)解决,不建议整体关闭。

十二、参考链接