EmailRelay 2.6.1 配置参数详解
EmailRelay 2.6.1 配置参数详解:--verbose --help 全量九组参数逐组精解(含 as-server/as-proxy/as-client 宏展开式、超时/端口真实默认值)、CRAM-MD5 凭据排障实录、TLS 自签实测、本机出口/弱网网关/前置过滤三套生产配置模板。实测日期 2026-10-25。
EmailRelay 2.6.1 配置参数详解
目标:系统讲清 EmailRelay 2.6.1 全部配置参数的分组、默认值、用法与实测行为,给出三套生产配置模板。参数清单来自
emailrelay --verbose --help全量输出与/usr/local/etc/emailrelay.conf668 行官方样例,实测环境 Ubuntu 22.04,实测日期 2026-10-25。
一、环境信息
- 软件版本:EmailRelay 2.6.1(源码编译安装,
/usr/local前缀) - 操作系统:Ubuntu 22.04 LTS(x86_64)
- 配置样例:
/usr/local/etc/emailrelay.conf(668 行,全注释形态) - 演示账号:
admin/q1w2e3r4
二、前置条件
已按《EmailRelay 2.6.1 Ubuntu 22.04 安装指南》完成编译安装,emailrelay --version 输出 E-MailRelay V2.6.1。
三、参数查看与修改方式
查看:emailrelay --verbose --help 输出全量 80+ 选项(232 行),按 Basic / SMTP client / SMTP server / POP / Admin / Authentication / TLS / Process / Logging 九组排列;--help 不带 --verbose 时只显示常用子集。
修改:三种等价方式,优先级从高到低——
- 命令行:
emailrelay --port 10025 --as-proxy 127.0.0.1:10026; - 配置文件:每个长选项去掉前导
--即配置键,如port=10025、forward-to=127.0.0.1:10026、无值开关写成裸行remote-clients; - 宏选项:
--as-server/--as-proxy/--as-client是官方预置的参数组合(展开式见下表)。
加载顺序:先读位置参数指定的配置文件(emailrelay /usr/local/etc/emailrelay.conf),再应用命令行,命令行覆盖配置文件。
四、参数总览(九组)
| 组 | 代表参数 | 管什么 |
|---|---|---|
| Basic | as-server / as-proxy / as-client / spool-dir | 运行形态与队列目录 |
| SMTP client | forward-to / forward / forward-on-disconnect / poll / connection-timeout / client-filter | 往外转发的一切 |
| SMTP server | port / remote-clients / interface / filter / dnsbl / size / domain | 收信监听的一切 |
| POP | pop / pop-port / pop-by-name / pop-no-delete / pop-auth | 内置 POP3 取信口 |
| Admin | admin / admin-terminate | 文本管理口 |
| Authentication | server-auth / client-auth / pop-auth + *-config | SMTP AUTH 与凭据文件 |
| TLS | server-tls / client-tls + 证书/校验族 | STARTTLS 与 SMTPS |
| Process | user / no-daemon / pid-file / dont-serve / no-smtp | 进程行为 |
| Logging | log / verbose / log-file / log-time / no-syslog / close-stderr / syslog | 日志去向与粒度 |
三个宏选项的精确展开(--verbose --help 原文):
| 宏 | 等价于 |
|---|---|
--as-server | --log --close-stderr |
--as-proxy <h:p> | --log --close-stderr --forward-on-disconnect --forward-to |
--as-client <h:p> | --log --no-syslog --no-daemon --dont-serve --forward --forward-to |
⚠️ 注意
--close-stderr:as-server 与 as-proxy 都会「启动后不久关闭 stderr」。若环境里没有可用 syslog(最小化系统常见),之后的日志会凭空消失——表现为日志文件只剩启动头几行。解法:把宏展开为显式参数、去掉--close-stderr并按需加--no-syslog或--log-file。
五、核心参数分类详解
5.1 Basic:运行形态与队列
--as-server:存储守护,只收存不主动发。--as-proxy <host:port>:存储转发,收信后(客户端断开时)立即尝试转发到指定下游,失败留队列。--as-client <host:port>:一次性客户端,启动即把队列全部转往指定下游,转空即退出,不监听端口——配合 cron 做定时外发。-s, --spool-dir=<dir>:队列目录,默认随安装(通常/var/spool/emailrelay)。队列文件为emailrelay.<pid>.<seq>.1.content+ 同名.envelope文件对;转发中信封临时改名.envelope.busy,成功即删。
5.2 SMTP client:转发行为
| 参数 | 默认 | 说明 |
|---|---|---|
-o, --forward-to=<host:port> | — | 下游 SMTP 地址,--forward/--forward-on-disconnect/--immediate 的前置依赖 |
-f, --forward | 关 | 启动时立即转发存量队列 |
-1, --forward-on-disconnect | 关 | 每个 SMTP 客户端断开后触发一次转发(as-proxy 的核心) |
-O, --poll=<period> | 关 | 按周期轮询队列并转发,如 --poll 60 |
-m, --immediate | 关 | 收信过程中即转发(先转后回执),延迟最低但失败语义不同 |
-U, --connection-timeout=<s> | 40 | 连下游超时 |
-T, --response-timeout=<s> | 60 | 等下游响应超时 |
--idle-timeout=<s> | 60 | 连接空闲超时 |
-Y, --client-filter=<program> | — | 转发时经外部程序处理邮件 |
-6, --client-interface=<ip> | — | 指定出站连接的本机地址(多网卡选路) |
--forward-to-all / --forward-to-some | all | 多收件人时要求全部被下游接受 / 允许部分接受 |
5.3 SMTP server:收信监听
| 参数 | 默认 | 说明 |
|---|---|---|
-p, --port=<port> | 25 | SMTP 监听端口 |
-r, --remote-clients | 关 | 允许远程客户端连接;不加则只接受本机回环,做网关必加 |
-I, --interface=<ip列表> | 全部 | 绑定监听地址,逗号分隔,可带 smtp=/pop=/admin= 限定 |
-z, --filter=<program> | — | 收信落盘时调外部过滤程序,退出码 1–99 拒收(SMTP 回 452 rejected);支持 net:<addr> 网络过滤器与 spam:<addr>/spam-edit:<addr> 直连 SpamAssassin spamd |
-W, --filter-timeout=<s> | 60 | 过滤器超时 |
-D, --domain=<fqdn> | 本机 | 覆盖 SMTP 横幅里的主机名 |
-M, --size=<bytes> | 不限 | 单封邮件大小上限 |
-w, --prompt-timeout=<s> | 20 | 等客户端初始响应超时 |
-A, --anonymous[=<scope>] | 关 | 禁 VRFY、精简 SMTP 应答 |
--dnsbl=<config> | — | DNSBL 黑名单拦截客户端地址 |
--address-verifier=<program> | — | 外部地址校验程序 |
-s, --delivery-dir=<dir> | — | 本地投递目录(与 spool 分工的另一形态) |
5.4 POP 服务(内置取信口)
-B, --pop:启用 POP3 服务,把队列邮件提供给 MUA 收取;-E, --pop-port=<port>:默认 110;-J, --pop-by-name:按 POP 用户名从 spool 子目录取信,实现多用户分队列;-G, --pop-no-delete:收取后不删队列副本;-F, --pop-auth=<file>:POP 凭据文件(格式同 server-auth,可用 plain 明文)。
实测会话(10110 端口):连接回 +OK POP3 server ready,USER/PASS 认证 OK,STAT 回 +OK 7 2679(7 封 2679 字节),LIST 1 回 +OK 1 465。
5.5 Admin 管理口
-a, --admin=<port>:开启文本管理口(裸 TCP,nc/telnet 直连);-Q, --admin-terminate:允许管理口terminate命令停守护(默认禁用)。
命令清单(help 实测回显):dnsbl, failures, flush, forward, help, info, list, notify, pid, quit, smtp, status, terminate, unfail-all。常用:status 看监听与收发计数,forward 触发队列转发,failures 看失败记录,flush 转空队列。详见《EmailRelay 2.6.1 常用 CLI 命令详解》。
⚠️ 管理口没有任何认证,只能绑回环地址或受信管理网段:
--interface admin=127.0.0.1,或防火墙限制来源。
5.6 Authentication:SMTP AUTH
-S, --server-auth=<file>:作为服务端校验客户端 AUTH;-C, --client-auth=<file>:作为客户端向下游出示凭据;--server-auth-config/--client-auth-config:微调认证模块。
凭据文件每行四字段:<server|client> <机制> <用户名> <密钥>。生成 CRAM-MD5 摘要:
$ echo q1w2e3r4 | emailrelay-passwd
24B8rH5KOs8vhwihaFPfqBQGzb5xRdtUN+5NqapD1lM=
写入 /usr/local/etc/emailrelay.auth:
server md5 admin 24B8rH5KOs8vhwihaFPfqBQGzb5xRdtUN+5NqapD1lM=
⚠️ 排障实录:字段 2 必须写
md5。写plain会在启动时报invalid authorisation secret: line 1: invalid xtext encoding of secret——plain 形态只用于 POP 凭据文件。生效后 EHLO 广告250-AUTH CRAM-MD5,swaks 认证成功回235 authentication successful。下行(向下游)认证把首字段写client。
5.7 TLS
服务端:
| 参数 | 说明 |
|---|---|
-K, --server-tls | 开 STARTTLS(需配合证书) |
--server-tls-certificate=<pem> | 私钥+证书合并的 PEM 文件 |
--server-tls-connection | 隐式 TLS(SMTPS 形态) |
--server-tls-required | 认证/投递前必须已 TLS |
--server-tls-verify=<ca> | 校验客户端证书 |
客户端(向下游):-j, --client-tls(STARTTLS)、-b, --client-tls-connection(SMTPS)、--client-tls-required、--client-tls-verify=<ca>、--client-tls-server-name=<hostname>(SNI)、--client-tls-verify-name=<cname>。底层用 -9, --tls-config=tlsv1.2 这类选项约束协议版本。
自签演示(实测 TLSv1.3 握手成功):
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=ubuntu-server"
cat key.pem cert.pem | sudo tee /usr/local/etc/ssl/emailrelay/emailrelay.pem >/dev/null
启动加 --server-tls --server-tls-certificate /usr/local/etc/ssl/emailrelay/emailrelay.pem,验证:
$ openssl s_client -connect 127.0.0.1:10025 -starttls smtp
...
subject=CN = ubuntu-server
...
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
5.8 Process 与 Logging
-u, --user=<username>:以 root 启动后切换的运行身份,默认daemon;-t, --no-daemon:前台运行(调试与 systemd/前台托管场景用);-i, --pid-file=<path>:PID 文件;-x, --dont-serve:不监听任何服务口(as-client 含);-X, --no-smtp:只关 SMTP 监听(留 admin/pop 口)。
Logging 组:-l, --log(stderr+syslog 双写)、-n, --no-syslog、-N, --log-file=<file>(%d 按日切分,如 /var/log/emailrelay-%d.log)、-L, --log-time、-v, --verbose(info 级收发记录)、-g, --debug(需编译进 debug)、-k, --syslog[=<facility>]、--log-address(日志附带客户端地址)、-e, --close-stderr。
六、生产配置模板
6.1 本机应用出口(最常用)
场景:应用服务器把邮件交给本机中继,统一 TLS+认证走向公网网关。8GB 内存、普通云盘即可(EmailRelay 资源占用极小)。
# /usr/local/etc/emailrelay.conf —— as-proxy 展开形态,保留 stderr 日志
port=25
spool-dir=/var/spool/emailrelay
forward-to=smtp-relay.example.com:25
forward-on-disconnect
client-tls
client-tls-required
client-tls-verify=/etc/ssl/certs
client-auth=/usr/local/etc/emailrelay.auth
admin=10027
interface=admin=127.0.0.1
user=daemon
log
log-time
verbose
no-syslog
log-file=/var/log/emailrelay-%d.log
6.2 弱网网关(存储 + 定时外发)
场景:站点间歇联网,平时收存,cron 每 10 分钟批量外发。磁盘按积压量预估(每封信 content+envelope 约 1KB 起)。
# 常驻存储守护
port=25
remote-clients
spool-dir=/var/spool/emailrelay
user=daemon
log
log-time
log-file=/var/log/emailrelay-%d.log
# /etc/cron.d/emailrelay —— 每 10 分钟尝试外发
*/10 * * * * root /usr/local/sbin/emailrelay --as-client smtp.isp.net:25 --spool-dir /var/spool/emailrelay >> /var/log/emailrelay-cron.log 2>&1
6.3 MTA 前置过滤层
场景:在 Postfix/Exchange 前做 DNSBL 与脚本过滤。16GB 内存、NVMe、日百万级收件量场景建议把 spool 放独立盘。
port=25
remote-clients
spool-dir=/var/spool/emailrelay
forward-to=127.0.0.1:10026
forward-on-disconnect
dnsbl=zen.spamhaus.org:127.0.0.2,127.0.0.3:554
filter=/usr/local/sbin/emailrelay-filter-demo
filter-timeout=60
size=26214400
user=daemon
log
log-time
verbose
log-file=/var/log/emailrelay-%d.log
七、常见问题
Q1:配置文件和命令行能混用吗? 能。位置参数给配置文件,命令行随后覆盖同名键。推荐「配置文件存基线、命令行做覆盖」。
Q2:改了配置不生效?
EmailRelay 无热加载,改后必须重启进程。管理口 terminate(需 --admin-terminate)或 systemctl restart。
Q3:队列里信越来越多不转发?
检查下游连通(日志里 warning: smtp client error: connect failure);恢复后管理口 forward 或等下次触发。failures 命令可查失败记录,unfail-all 重置失败态。
Q4:怎么确认某选项是否编译进当前二进制?
emailrelay --verbose --help 列出的就是当前二进制支持的全集;TLS 相关选项缺失说明编译期没装 libssl-dev,需重新编译。
Q5:DKIM/SPF/DMARC 怎么配?
2.6.1 无原生支持。可行路径是 --filter 外挂脚本(如调 opendkim 的验证接口或自写 SPF 查询),签名类需求建议前置专职网关。
八、参考链接
- 官方 User Guide(Configuration 章):https://emailrelay.sourceforge.net/
- 安装产物中的 668 行配置样例:
/usr/local/etc/emailrelay.conf - 本专栏:《EmailRelay 2.6.1 介绍与选型指南》《EmailRelay 2.6.1 Ubuntu 22.04 安装指南》《EmailRelay 2.6.1 Docker Compose 部署指南》《EmailRelay 2.6.1 常用 CLI 命令详解》