Mox v0.0.17 配置参数详解

逐段详解 Mox v0.0.17 双配置文件:静态 mox.conf(ACME/Listeners/Transports/WebHandlers)与动态 domains.conf(DKIM/DMARC/MTA-STS/账号垃圾过滤),含静态重启与动态热重载两条实测生效闭环、生产模板与 6 例 FAQ。

MoxMox邮件服务器2026/10/21

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,服务器 IP 10.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)
Userroot 绑定端口后降权的用户是(mox)
Hostname服务器对外主机名是(mail.example.com)
CheckUpdates每 24h 检查新版并投递变更日志给 postmaster否(注释态,官方建议开启)
TLS静态证书(非 ACME 场景)否
ACMEACME 自动证书(Let's Encrypt 等)是(letsencrypt)
AdminPasswordFile管理后台密码哈希文件是(adminpasswd)
Listeners监听器组(IP + 服务开关),最核心段是(internal + public)
Postmasterpostmaster 信件的投递目标是
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.nl TXT 记录,有新版就抓取变更日志投递到 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常规直投
SubmissionsTLS 提交端口(465)经云中继/智能主机转发
SubmissionSTARTTLS 提交(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)。

八、参考链接