Mox v0.0.17 配置参数详解
逐段详解 Mox v0.0.17 双配置文件:静态 mox.conf(ACME/Listeners/Transports/WebHandlers)与动态 domains.conf(DKIM/DMARC/MTA-STS/账号垃圾过滤),含静态重启与动态热重载两条实测生效闭环、生产模板与 6 例 FAQ。
Mox v0.0.17 配置参数详解
目标:逐段讲清 Mox v0.0.17 的两个配置文件(静态
mox.conf与动态domains.conf)的核心参数含义、默认值与修改方法,并给出「配置修改 → 语法检查 → 重载/重启 → 验证生效」的实测闭环。全部命令与回显均在 Ubuntu 22.04.5 LTS 服务器(Mox v0.0.17,安装布局/home/mox)实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Mox 版本:v0.0.17(
./mox version→v0.0.17-go1.27.3) - 安装布局:二进制
/home/mox/mox,配置/home/mox/config/,数据/home/mox/data/ - 主机名/域名:
mail.example.com/example.com,服务器 IP10.89.58.2 - 运行方式:systemd 服务(
mox.service,active) - 安装过程见 《Ubuntu 22.04 安装 Mox 指南》,软件定位与选型背景见 《Mox v0.0.17 介绍与选型指南》
二、前置条件
- 已按安装指南完成 quickstart 初始化,
/home/mox/config/mox.conf与/home/mox/config/domains.conf存在; - 以 root 或可 sudo 的用户操作,执行 mox 子命令时先
cd /home/mox(mox 按当前工作目录寻找config/mox.conf); - systemd 服务在跑:
systemctl is-active mox→active(实测回显)。
三、参数查看与修改方式
Mox 的配置体系由两个文件构成,机制不同,修改方式也不同——这是使用 Mox 最重要的一个前提认知(源自官方 config 包文档原文语义):
| 文件 | 别名 | 内容 | 修改后生效方式 |
|---|---|---|---|
/home/mox/config/mox.conf | 静态配置 | 服务器级:数据目录/日志/监听器/ACME/TLS/传输/队列路由 | 必须重启(systemctl restart mox),运行期永不热重载 |
/home/mox/config/domains.conf | 动态配置 | 域名与账号:域名/DKIM/DMARC/账号/别名/垃圾过滤 | 保存自动热重载;若新内容有错,放弃重载并沿用旧配置 |
3.1 sconf 文件格式约定
两个文件都是 sconf 格式,硬性规则(违反即解析失败):
- 只能用 Tab 缩进,空格缩进直接报错;
#开头的行为注释,且必须独占一行——值所在行不能带行尾注释;- 字符串不加引号、不转义,字符串不能跨行;
- 可选字段可整个省略;省略时用内置默认值。
3.2 查看参数:两条 describe 命令
Mox 官方提供的「活文档」是两条生成式命令——输出即带全量注释的参数模板:
cd /home/mox
./mox config describe-static > /tmp/mox-static-reference.conf
./mox config describe-domains > /tmp/mox-domains-reference.conf
wc -l /tmp/mox-static-reference.conf /tmp/mox-domains-reference.conf
实测输出:
1044 /tmp/mox-static-reference.conf
743 /tmp/mox-domains-reference.conf
describe-static 的 1044 行覆盖 mox.conf 全部段(每段前有官方注释说明与默认值),describe-domains 的 743 行覆盖 domains.conf 全部段。读不懂的参数先查这两份模板,注释即官方文档。
当前生效配置的直接查看:
grep -vE '^\s*(#.*)?$' /home/mox/config/mox.conf | head -20
实测输出:
# NOTE: This config file is in 'sconf' format. Indent with tabs. Comments must be
DataDir: ../data
LogLevel: debug
User: mox
Hostname: mail.example.com
ACME:
letsencrypt:
DirectoryURL: https://acme-v02.api.letsencrypt.org/directory
ContactEmail: admin@example.com
IssuerDomainName: letsencrypt.org
AdminPasswordFile: adminpasswd
Listeners:
internal:
IPs:
- 127.0.0.1
- ::1
Hostname: localhost
3.3 语法检查:mox config test
任何修改前后都跑一次内置校验:
cd /home/mox
./mox config test
实测输出:
config OK
3.4 两条生效路径的实测闭环
静态路径(mox.conf):改 LogLevel: debug → info → 重启 → 按进程 PID 验证日志级别变化:
cd /home/mox
sed -i 's/^LogLevel: debug$/LogLevel: info/' config/mox.conf
./mox config test
systemctl restart mox
sleep 2
systemctl is-active mox
实测输出:
config OK
active
重启后新进程的 debug 日志归零(对比重启前旧进程 110 条):
journalctl -u mox -q --no-pager _PID=<重启后主PID> | grep -c 'l=debug'
journalctl -u mox -q --no-pager _PID=<重启前主PID> | grep -c 'l=debug'
实测输出:
0
110
动态路径(domains.conf):config domain add 改写文件并自动热重载,全程不重启:
cd /home/mox
./mox config domain add example.net admin
实测输出:
domain added, remember to add dns records, see:
mox config dnsrecords example.net
mox config dnscheck example.net
日志即时确认(无重启动作):
journalctl -u mox -n 3 --no-pager -q | grep -oE 'm="[a-z ]+"' | head -2
实测输出:
m="ctl command"
m="domain added"
清理演示域名:./mox config domain rm example.net(实测输出 domain removed, remember to remove dns records for example.net,grep -c example.net config/domains.conf 回到 0)。
四、参数总览
mox.conf 的顶级段(按 describe-static 顺序):
| 顶级段 | 作用 | quickstart 是否预置 |
|---|---|---|
| DataDir | 数据总目录 | 是 |
| PackageLogLevels | 按包粒度覆盖日志级别 | 否 |
| LogLevel | 全局默认日志级别 | 是(debug) |
| User | root 绑定端口后降权的用户 | 是(mox) |
| Hostname | 服务器对外主机名 | 是(mail.example.com) |
| CheckUpdates | 每 24h 检查新版并投递变更日志给 postmaster | 否(注释态,官方建议开启) |
| TLS | 静态证书(非 ACME 场景) | 否 |
| ACME | ACME 自动证书(Let's Encrypt 等) | 是(letsencrypt) |
| AdminPasswordFile | 管理后台密码哈希文件 | 是(adminpasswd) |
| Listeners | 监听器组(IP + 服务开关),最核心段 | 是(internal + public) |
| Postmaster | postmaster 信件的投递目标 | 是 |
| HostTLSRPT | 主机级 TLS 报告配置 | 是 |
| InitialMailboxes / DefaultMailboxes | 新账号初始邮箱箱 | 否 |
| Transports | 出站传输通道(直投/中继/SOCKS) | 否 |
| NoOutgoingTLSReports / OutgoingTLSReportsForAllSuccess / QuotaMessageSize | 出站 TLS 报告与附件限额全局开关 | 否 |
| WebDomainRedirects / WebHandlers | 内建 Webserver 的域名重定向与路由 | 否 |
domains.conf 的顶级段:
| 顶级段 | 作用 |
|---|---|
| Domains | 托管域名及每域名的 DKIM/DMARC/MTA-STS/TLSRPT 等 |
| Accounts | 账号及每账号的地址/投递规则/垃圾过滤等 |
| MonitorDNSBLs | 只监控自己出站 IP 是否上榜的 DNSBL 列表 |
关键解读:「监听器 + 域名 + 账号」三段是 Mox 配置的骨架——Listeners 决定「在哪些 IP 上开哪些服务」,Domains 决定「收谁的信」,Accounts 决定「信投给谁、怎么过滤」。其余段围绕这三者做加固与扩展。
五、核心参数分类详解
每节先给实测配置原文(来自当前环境真实文件),再逐项解读。
5.1 全局基础段(mox.conf)
实测配置:
# Directory where all data is stored, e.g. queue, accounts and messages, ACME TLS
# certs/keys. If this is a relative path, it is relative to the directory of
# mox.conf.
DataDir: ../data
# Default log level, one of: error, info, debug, trace, traceauth, tracedata.
LogLevel: debug
# User to switch to after binding to all sockets as root. Default: mox.
User: mox
# Full hostname of system, e.g. mail.<domain>
Hostname: mail.example.com
# If enabled, a single DNS TXT lookup of _updates.xmox.nl is done every 24h to
# check for a new release. ...
#CheckUpdates: true
# File containing hash of admin password, for authentication in the web admin
# pages (if enabled). (optional)
AdminPasswordFile: adminpasswd
逐项解读:
DataDir: ../data:所有数据(队列、账号邮件、ACME 证书密钥)的根。相对路径以 mox.conf 所在目录(config/)解析,../data即/home/mox/data。改这里等于整体迁移数据目录,需同步迁移磁盘数据并重启。LogLevel:六个档位——error(仅错误)/info(常规运行,推荐生产)/debug(含协议调试,quickstart 默认)/trace(SMTP/IMAP 协议全文)/traceauth(trace + 含密码消息)/tracedata(再加大数据量全文)。级别从左到右越来越啰嗦,生产用 info、排障短期开 debug、慎用 trace 系列(磁盘消耗大且含敏感内容)。User: mox:以 root 启动绑定特权端口(25/443)后切换到的用户。可改为其他用户名或直接写 uid/gid 数字。Hostname:服务器的对外身份,出现在 HELO、MX 目标、TLS 证书主体、DSN 中。必须为 FQDN 且有解析,改它属于大动作(证书/DNS 记录联动)。CheckUpdates: true:默认注释(关闭)。开启后每天查一次_updates.xmox.nlTXT 记录,有新版就抓取变更日志投递到 postmaster 邮箱,官方标注 RECOMMENDED。AdminPasswordFile: adminpasswd:管理后台密码哈希文件(相对 config 目录)。由mox setadminpassword写入,不手工编辑。
5.2 ACME 段(mox.conf)
实测配置:
ACME:
letsencrypt:
DirectoryURL: https://acme-v02.api.letsencrypt.org/directory
ContactEmail: admin@example.com
IssuerDomainName: letsencrypt.org
逐项解读:
- 顶层键
letsencrypt是自定义的 ACME 提供方名字,被 Listeners 里 TLS 段的 ACME 引用按名字对上; DirectoryURL:ACME 目录端点。Let's Encrypt 生产环境固定为https://acme-v02.api.letsencrypt.org/directory(quickstart 默认);ContactEmail:证书到期/吊销通知邮箱,建议用本机投递的地址(注意:TLS 配置故障会导致通知信收不到);IssuerDomainName:用于建议 CAA DNS 记录;为空且 DirectoryURL 是 Let's Encrypt 时自动取letsencrypt.org。
💡 技术拓展:ACME 证书之外,Mox 也支持静态证书(TLS 段的 KeyCerts 直接指定 crt/key 文件)。两条路线对比:
路线 配置位置 续期 适用 ACME 自动 ACME 段 + 监听器 TLS 引用 全自动,到期前续 公网可达 443 的服务器(主流) 静态证书 监听器 TLS.KeyCerts 手工/外部工具续期 内网、或证书由企业 CA 签发 本文实测环境用 quickstart 生成的混合形态:ACME 段定义 letsencrypt 提供方,public 监听器同时持有 KeyCerts(自签引导证书)与 HostPrivateKeyFiles(ACME 请求前就位的主机私钥,用于预生成 DANE TLSA 记录)。
5.3 Listeners 监听器段(mox.conf)
监听器是 mox.conf 的核心:每个监听器 = 一组 IP + 该 IP 上开启的服务。quickstart 生成两个:internal(回环,管理面)与 public(对外网卡,邮件面)。名字为 public 的监听器会被 mox 附加特殊检查(ACME 证书、DNSBL 自监控)。
实测配置(internal 节选):
Listeners:
internal:
IPs:
- 127.0.0.1
- ::1
Hostname: localhost
AccountHTTP:
Enabled: true
AdminHTTP:
Enabled: true
WebmailHTTP:
Enabled: true
WebAPIHTTP:
Enabled: true
MetricsHTTP:
Enabled: true
实测配置(public 节选):
public:
IPs:
- 10.89.58.2
TLS:
KeyCerts:
-
CertFile: tls/mail.example.com.crt
KeyFile: tls/mail.example.com.key
HostPrivateKeyFiles:
- hostkeys/mail.example.com.20261021T064807.rsa2048.privatekey.pkcs8.pem
- hostkeys/mail.example.com.20261021T064807.ecdsap256.privatekey.pkcs8.pem
SMTP:
Enabled: true
Submissions:
Enabled: true
IMAPS:
Enabled: true
AutoconfigHTTPS:
Enabled: true
MTASTSHTTPS:
Enabled: true
WebserverHTTP:
Enabled: true
WebserverHTTPS:
Enabled: true
逐项解读:
IPs:监听 IP 列表。官方建议显式写对外 IP而非 0.0.0.0/::——mox 会确保出站连接只从这些 IP 发起(对 SPF 信誉至关重要)。回环用127.0.0.1/::1。Hostname(internal 特有):internal 面的 HTTP 服务匹配的 Host 名,默认 localhost。SMTP.Enabled:25 端口入站投递;其下可选DNSBLs列表(如 sbl.spamhaus.org、bl.spamcop.net)对无信誉记录的连接做黑名单检查。Submissions.Enabled:465 端口(SMTP over TLS)用户提交,需 TLS 配置。IMAPS.Enabled:993 端口读信,需 TLS 配置。- 未开启的同族服务:
Submission(587 STARTTLS)、IMAP(143)、POP3S/POP3(995/110)——Mox 鼓励只开加密端口,quickstart 默认全关非 TLS 端口。 AccountHTTP/AdminHTTP/WebmailHTTP/WebAPIHTTP/MetricsHTTP:内部 HTTP 端点(账号页/管理后台/Webmail/Web API/Prometheus 指标),只应在非公网 IP 开启(尤其 AdminHTTP 与 MetricsHTTP)。AutoconfigHTTPS:为 Thunderbird 等客户端提供自动配置(443);MTASTSHTTPS:对外发布 MTA-STS 策略(443)。WebserverHTTP/WebserverHTTPS:承载 5.6 节 WebHandlers 路由的总开关。TLS.KeyCerts:静态证书对(crt+key,相对 config 目录);TLS.HostPrivateKeyFiles:主机私钥文件(PKCS8),提前就位以便在拿到证书前就能生成 DANE TLSA DNS 记录。TLS.ACME(本文未启用):引用 5.2 节定义的 ACME 提供方名,自动为监听器主机名签证书。
启动日志可对照验证监听器生效情况(实测 journalctl -u mox 节选):
l=print m="listening for smtp" pkg=smtpserver listener=public address=10.89.58.2:465 protocol=submissions
l=print m="listening for imap" pkg=imapserver listener=public addr=10.89.58.2:993 protocol=imaps
l=print m="http listener" pkg=http name=internal kinds="account-http at /,admin-http at /admin/,webapi-http at /webapi/,webmail-http at /webmail/" address=127.0.0.1:80
l=print m="https listener" pkg=http name=public kinds=autoconfig-https,mtasts-https,webserver-https address=10.89.58.2:443
5.4 Postmaster 与 HostTLSRPT 段(mox.conf)
实测配置:
Postmaster:
Account: admin
Mailbox: Postmaster
HostTLSRPT:
Account: admin
Mailbox: TLSRPT
Localpart: tlsreports
逐项解读:
Postmaster:寄往postmaster@<主机名>(以及各域未单独配置 postmaster 时的兜底)的信件投递到 admin 账号的 Postmaster 邮箱。DSN(退信)也走这里,建议保留。HostTLSRPT:主机级 TLS 报告(对应 DNS 记录_smtp._tls.mail.example.com)。Localpart: tlsreports即接收地址 tlsreports@mail.example.com,报表投到 admin 账号的 TLSRPT 邮箱。
5.5 Transports 出站传输段(mox.conf)
quickstart 默认不生成(直投即默认)。当出站邮件需要经中继(smarthost)或 SOCKS 代理时配置。describe-static 模板显示支持的类型:
| 传输类型 | 连接方式 | 典型场景 |
|---|---|---|
| (默认,无 transport) | 直连对方 MX | 常规直投 |
| Submissions | TLS 提交端口(465) | 经云中继/智能主机转发 |
| Submission | STARTTLS 提交(587) | 同上,旧服务 |
| SMTP | 明文/STARTTLS 25 中继 | 传统无认证中继 |
| Socks | 经 SOCKS5 代理出站 | 出站 IP 受限时(RemoteIPs 需进 SPF) |
队列路由:每域名/账号可配 Routes,按 FromDomain/ToDomain/MinimumAttempts 匹配后走指定 transport(如直投失败 N 次后改走 smarthost)。 Transports 属 mox.conf 静态段,修改后重启生效。
5.6 Webserver 段:WebDomainRedirects 与 WebHandlers(mox.conf)
Mox 内建了完整的 Webserver(这正是官方建议邮件服务器不再另配 Nginx 的底气)。两个顶级段:
WebDomainRedirects:域名级 301(HTTPS 永久重定向),形如old.example.com: new.example.com;WebHandlers:路由规则列表,自上而下首个匹配生效(ACME/autoconfig/mta-sts 系统路由最先,admin/account/webmail/webapi 内建路由最后,允许 WebHandler 覆盖内建服务)。
每条 WebHandler 的骨架(源自 describe 模板):
WebHandlers:
-
LogName: static
Domain: example.com
PathRegexp: ^/
DontRedirectPlainHTTP: false
Compress: false
WebStatic:
StripPrefix: /static/
Root: path/to/files
ListFiles: false
ContinueNotFound: false
# 四选一:WebStatic / WebRedirect / WebForward / WebInternal
逐项解读:
Domain + PathRegexp:两者都命中才处理;PathRegexp 必须^开头;WebStatic:静态文件服务,StripPrefix截前缀、Root文件根目录(相对 mox 工作目录)、ListFiles目录列表、ContinueNotFound未命中时穿透到下一条(等价 try_files);WebRedirect:跳转(BaseURL或OrigPathRegexp+ReplacePath改写路径);WebForward:反向代理到后端应用(可剥离路径前缀);WebInternal:转发到本机内部端口;Compress:gzip 压缩(静态文件另存压缩缓存)。
该段属 mox.conf 静态配置,改动需重启。验证方法:配置一条静态站点后 curl -I http://<域名>/<路径> 看 200/308 回显。
5.7 domains.conf:域名级参数
实测配置(example.com 节选,全部为 quickstart 自动生成):
Domains:
example.com:
ClientSettingsDomain: mail.example.net
LocalpartCatchallSeparator:
LocalpartCaseSensitive: false
DKIM:
Selectors:
2026a:
Expiration: 72h
PrivateKeyFile: dkim/2026a._domainkey.example.com.20261021T064807.rsa2048.privatekey.pkcs8.pem
2026b:
Expiration: 72h
PrivateKeyFile: dkim/2026b._domainkey.example.com.20261021T064807.rsa2048.privatekey.pkcs8.pem
Sign:
- 2026a
DMARC:
Localpart: dmarcreports
Account: admin
Mailbox: DMARC
MTASTS:
PolicyID: 20261021T064807
Mode: enforce
MaxAge: 24h0m0s
MX:
- mail.example.com
TLSRPT:
Localpart: tlsreports
Account: admin
Mailbox: TLSRPT
逐项解读:
ClientSettingsDomain:给客户端配置用的域名(如 mail.example.com)。用子域而非服务器主机名,未来迁移邮件服务商时客户端免改配置。LocalpartCatchallSeparator:加号别名分隔符(如+,you+tag@example.com 投给 you@example.com)。留空关闭。LocalpartCaseSensitive:本地部分大小写敏感,保持 false(默认)。DKIM.Selectors:每个选择器一个私钥文件 + 有效期;Sign列表决定实际签名的选择器(其余为备份轮换用)。quickstart 默认生成 2026a/2026b 两个 RSA 选择器并启用第一个。加新选择器流程:mox config dnsrecords <域名>看待加记录 → DNS 上发布 TXT → 把选择器名加进 Sign。DMARC:本域 DMARC 报告接收(dmarcreports@example.com → admin 账号 DMARC 邮箱)。DMARC 策略本身(p=reject)在 DNS TXT 记录里,配置文件管的是报表投递。MTASTS:MTA-STS 策略发布参数——PolicyID(版本号,改策略时必须更新)、Mode(enforce 强制/testing 测试/none 无)、MaxAge(缓存时长)、MX(策略允许的 MX 列表)。TLSRPT:本域 TLS 报告接收配置(对应 DNS 记录 _smtp._tls.example.com)。- 域名级其他可选参数(见 describe-domains 模板):
Disabled(迁移期临时停收,收 450 暂态拒信)、Description、LocalpartCatchallSeparators(多分隔符)等。
新增域名的完整动作链(实测):./mox config domain add <域名> <账号> → 自动生成 DKIM 密钥对并写 domains.conf → ./mox config dnsrecords <域名> 打印待发布 DNS 记录 → DNS 运营商处发布 → ./mox config dnscheck <域名> 逐项核验(MX/SPF/DKIM/DMARC 各项给出 pass/error 实测结论)。
5.8 domains.conf:账号级参数
实测配置(admin 账号全文):
Accounts:
admin:
Domain: example.com
Destinations:
admin@example.com: nil
SubjectPass:
Period: 12h0m0s
RejectsMailbox: Rejects
AutomaticJunkFlags:
Enabled: true
JunkMailboxRegexp: ^(junk|spam)
NeutralMailboxRegexp: ^(inbox|introbox|neutral|postmaster|dmarc|tlsrpt|rejects)
JunkFilter:
Threshold: 0.950000
Params:
Onegrams: true
MaxPower: 0.010000
TopWords: 10
IgnoreWords: 0.100000
RareWords: 2
NoCustomPassword: true
逐项解读:
Domain:账号的默认域;Destinations:该账号接收的完整地址列表(键为地址,值为投递规则 nil=默认 Inbox)。一个账号可挂多域多地址。SubjectPass:主题口令功能——发件人在主题加口令即可绕过垃圾过滤直达;Period为口令有效期,过期后自动换新(新口令在退信提示里告知对方)。轻量白名单机制,适合偶尔被误杀的重要联系人。RejectsMailbox:SMTP 会话后被判垃圾的邮件落进哪个邮箱(Rejects),供事后找回。AutomaticJunkFlags:按邮箱名正则自动打垃圾标记——进 JunkMailboxRegexp 匹配邮箱的信标为垃圾(用于训练),进 NeutralMailboxRegexp 的信标记为非垃圾。JunkFilter:内置统计垃圾过滤器。Threshold: 0.95判定阈值;Params为训练参数(Onegrams 单字词、MaxPower 单词最大权重、TopWords 取前 N 词、IgnoreWords 高频词忽略比、RareWords 罕见词强化数)。过滤器是按账号独立训练的:把垃圾邮件挪进/挪出 Junk 邮箱即在训练。NoCustomPassword: true:禁止该账号在 Web 界面自改密码(管理统一控制时用)。- 账号级可选参数还有
Aliases(别名投递规则)、MaxOutgoingMessagesPerDay等限额项(详见 describe-domains)。
5.9 MonitorDNSBLs 段(domains.conf)
实测配置:
MonitorDNSBLs:
- sbl.spamhaus.org
- bl.spamcop.net
解读:只做出站 IP 自监控——定期查自己服务器 IP 是否上了这些黑名单,上了就给 postmaster 发提醒信。与监听器 SMTP.DNSBLs(用于入站拒信)是两回事:MonitorDNSBLs 只监控不拦截,且不会把通信对端 IP 发给黑名单服务商(隐私考虑)。
六、生产配置模板
适用于 28GB 内存、NVMe/SSD、托管 15 个域名的中小团队自托管场景。基于 quickstart 产物做最小化修改(Tab 缩进):
# mox.conf 生产建议(改三处)
DataDir: ../data
LogLevel: info # ① 生产改 info,排障时临时开 debug
User: mox
Hostname: mail.example.com
CheckUpdates: true # ② 打开:新版本变更日志自动投给 postmaster
ACME:
letsencrypt:
DirectoryURL: https://acme-v02.api.letsencrypt.org/directory
ContactEmail: admin@example.com
IssuerDomainName: letsencrypt.org
AdminPasswordFile: adminpasswd
Listeners:
internal:
IPs:
- 127.0.0.1
- ::1
Hostname: localhost
AccountHTTP:
Enabled: true
AdminHTTP:
Enabled: true
MetricsHTTP:
Enabled: true
public:
IPs:
- 10.89.58.2 # ③ 显式对外 IP(勿用 0.0.0.0)
TLS:
ACME:
letsencrypt:
SMTP:
Enabled: true
DNSBLs: # 入站黑名单(按需启用)
- sbl.spamhaus.org
- bl.spamcop.net
Submissions:
Enabled: true
IMAPS:
Enabled: true
AutoconfigHTTPS:
Enabled: true
MTASTSHTTPS:
Enabled: true
WebserverHTTP:
Enabled: true
WebserverHTTPS:
Enabled: true
Postmaster:
Account: admin
Mailbox: Postmaster
三处修改后的生效流程(静态文件必须重启):
cd /home/mox
./mox config test
systemctl restart mox
systemctl is-active mox
journalctl -u mox -n 5 --no-pager | grep -E 'ready|listening' | head -3
实测输出(重启验证形态):
config OK
active
l=print m="ready to serve" pkg=serve
内存 footprint 说明:Mox 为 Go 单进程,实测本机运行期常驻内存约 30~60MB(ps -o rss= -p <mox pid> 千字节量级),无需 JVM 类堆配置;磁盘随邮件量线性增长,DataDir 所在分区预留 mailspace 即可。
七、常见问题(FAQ)
Q1:改了 mox.conf 不生效?
静态配置不支持热重载。./mox config test 确认 config OK 后 systemctl restart mox。domains.conf 则保存即自动生效。
Q2:配置文件被解析报错?
最常见三因:用空格替代了 Tab 缩进;值后面跟了行内注释;字符串加了引号。逐条对照 3.1 节 sconf 规则修正后 mox config test 复查。
Q3:域名加了但收不到信?
走四步:mox config dnsrecords <域名> 拿记录清单 → DNS 运营商发布 → mox config dnscheck <域名> 看逐项 error → 特别核对 MX 是否指向主机名、SPF/DKIM/DMARC 三件套是否齐。
Q4:管理后台打不开?
AdminHTTP 只在 internal 监听器(127.0.0.1)开启。本机 curl -I http://localhost/admin/ 应为 200(实测);远程访问用 SSH 隧道 ssh -L 8080:localhost:80 you@server 后开 http://localhost:8080/admin/。不要把它开到公网 IP。
Q5:ACME 证书一直申请失败?
443 必须公网可达(AutoconfigHTTPS/MTASTSHTTPS 都依赖 TLS);域名解析正确;Let's Encrypt 有频控(同域名每周 5 次)。排查看 journalctl -u mox | grep -i acme。
Q6:如何加一个新邮箱账号?
动态配置热操作,例如新增账号 jack(地址 jack@example.com):./mox config account add jack jack@example.com,实测回显 account added, set a password with "mox setaccountpassword jack"(自动热重载并提示下一步);随后 printf '新密码\n新密码\n' | ./mox setaccountpassword jack 设密码,客户端用完整邮箱地址登录。删除账号用 ./mox config account rm jack(回显 account removed)。
八、参考链接
- 官方配置参考(Config reference,两文件的完整注释版):https://www.xmox.nl/features/
- 官方安装页:https://www.xmox.nl/install/
- sconf 格式:https://pkg.go.dev/github.com/mjl-/sconf
- 源码配置定义(config/doc.go):https://github.com/mjl-/mox/blob/main/config/doc.go
- 站内系列:安装主线见 《Ubuntu 22.04 安装 Mox 指南》,运维命令见 《Mox 常用 CLI 命令详解》,选型背景见 《Mox v0.0.17 介绍与选型指南》