EmailRelay 2.6.1 介绍与选型指南

EmailRelay 2.6.1 介绍与选型指南:C++ GPLv3 单进程 SMTP 存储转发中继,as-server/as-proxy/as-client 三形态、文件队列、filter 钩子与内置 POP,实查无原生 DKIM/DMARC、Ubuntu/Debian 无包、官方无镜像,与 Postfix/Courier/OpenSMTPD/msmtp/nullmailer 量化对比。查询日期 2026-10-25。

EmailRelayEmailRelaySMTP邮件中继2026/10/25

EmailRelay 2.6.1 介绍与选型指南

目标:说清 EmailRelay 是什么、解决什么问题、与常见邮件组件如何取舍。本文信息实查自官方站点与 SourceForge 项目页,查询日期 2026-10-25。

一、环境信息

二、软件概述

EmailRelay(常写作 E-MailRelay)是 Graeme Walker 用 C++ 编写、以 GPLv3 发布的轻量级 SMTP 存储转发中继(store-and-forward relay)。它不是一个功能完整的邮件服务器(没有 IMAP 邮箱、没有 Web 界面、没有虚拟用户体系),而是一个专注于「收下邮件、存进队列、择机转发」的单一守护进程:

  • 收下:以 SMTP 服务端身份监听端口,接受本机或远程客户端提交的邮件;
  • 存进队列:把每封信以「content + envelope」文件对的形式落盘到 spool 目录,SMTP 会话一结束就确认收讫,发送方无需等待下游;
  • 择机转发:按配置立即转发、定时轮询转发,或由外部事件(cron、管理接口命令)触发,把队列里的邮件转给下一跳 SMTP 服务器。

这种「先把邮件安全落盘,再异步送达」的模型,让 EmailRelay 在网络不可靠、下游不稳定、需要削峰解耦的场景里特别好用:发送方把邮件交给本机的 EmailRelay 就能立即返回,真正的投递由 EmailRelay 在后台重试完成。

EmailRelay 同时提供 Windows 版本(emailrelay-2.6.1-w64.zip),Linux/Unix 侧以源码包 emailrelay-2.6.1-src.tar.gz 交付(1.6MB,SHA256 a0bcd88179a6545817b670b1ed6d6aac7c4dae90fabd220ef08d3f6743b69e9c)。

三、核心架构

EmailRelay 的架构是「一个二进制、三种运行形态」,由 --as-server / --as-proxy / --as-client 三个宏选项切换:

形态等价展开(来自 --verbose --help)用途
--as-server--log --close-stderr存储守护:收下邮件只存队列,不主动外发,等外部触发
--as-proxy <host:port>--log --close-stderr --forward-on-disconnect --forward-to存储转发代理:边收边转,下游失败则留队列重试
--as-client <host:port>--log --no-syslog --no-daemon --dont-serve --forward --forward-to一次性转发器:转空队列即退出,适合 cron 周期触发

架构要点:

  • 文件队列即存储:spool 目录下 emailrelay.<pid>.<seq>.1.content 存邮件正文,同名 .envelope 存收发件人等信封信息(X-MailRelay-From/To 等头部字段),转发中的信封临时改名 .envelope.busy,成功即删。没有数据库、没有索引,队列状态就是文件系统状态。
  • 过滤器钩子:--filter <program> 在收信落盘时调用外部程序(退出码 1–99 拒收),--client-filter 在转发时调用;内置 spam:/spam-edit: 前缀可直接对接 SpamAssassin 的 spamd。
  • 管理接口:--admin <port> 开一个纯文本 TCP 管理口,用 status/forward/flush/failures 等命令查看状态、触发转发。
  • TLS 与认证:编译时链接 OpenSSL 后支持 STARTTLS 与 SMTPS,支持服务端/客户端双向证书校验;SMTP AUTH 以 CRAM-MD5 为主,凭据文件由自带的 emailrelay-passwd 生成摘要。

四、功能特性

  • 存储转发 SMTP 中继:收信即落盘,转发失败自动积压、恢复后可手动或自动重发;
  • 三种运行形态覆盖「常驻存储 / 实时转发 / 定时批量外发」三类拓扑;
  • 内置 POP3 服务端(--pop),可把队列里的邮件以 POP3 方式提供给 MUA 收取,支持按用户名分目录(--pop-by-name);
  • 外部过滤器钩子 + SpamAssassin 对接,用于内容扫描与拒收;
  • STARTTLS / SMTPS、客户端证书校验、CRAM-MD5 认证;
  • DNSBL 黑名单(--dnsbl)、地址校验钩子(--address-verifier)、限速与尺寸限制(--size);
  • 附带 emailrelay-submit(命令行直接向队列投信)与 emailrelay-passwd(生成认证摘要)两个辅助工具;
  • 单进程、无第三方服务依赖,编译产物仅三个二进制 + 一份配置样例。

五、快速开始(最小可用示例)

以「本机 10025 端口收信、实时转发到上游 10026」的代理形态为例(完整安装步骤见《EmailRelay 2.6.1 Ubuntu 22.04 安装指南》):

# 终端 1:起存储守护,模拟上游(仅演示拓扑,生产换成真实下游 MTA)
emailrelay --as-server --port 10026 --spool-dir /var/spool/emailrelay-sink \
  --log --log-time --log-file /var/log/emailrelay-sink.log \
  --pid-file /run/emailrelay-sink.pid --user root

# 终端 2:起转发代理,监听 10025
emailrelay --as-proxy 127.0.0.1:10026 --port 10025 --spool-dir /var/spool/emailrelay \
  --log --log-time --log-file /var/log/emailrelay.log \
  --pid-file /run/emailrelay.pid --user root

用任意 SMTP 客户端向 10025 发信,会立即收到 250 message processed,邮件随即被转发到 10026 并落盘。若把上游 10026 停掉再发信,发送方依然收到 250,邮件留在队列;上游恢复后经管理接口 forward 命令触发即可补投——这正是存储转发的价值所在。

六、适用场景与限制

适合:

  • 应用服务器/脚本的本机 SMTP 出口:应用只认 localhost:25 发信,由 EmailRelay 负责 TLS、认证与重试,替应用挡住下游抖动;
  • 离线/弱网环境的邮件网关:间歇联网场景下先收后转,联网窗口用 cron 触发 --as-client 批量外发;
  • 自动化与告警链路:emailrelay-submit 让 shell 脚本不依赖 SMTP 客户端库即可投信;
  • SMTP 协议适配与预处理:在真实 MTA 前加一层做过滤、限速、DNSBL。

限制(实查官方文档确认):

  • 无原生 DKIM/DMARC/SPF:官方文档没有 DKIM/DMARC 章节,SPF 也只能经 --filter 钩子外挂脚本实现;要求完整反垃圾签名体系时需前置其他网关;
  • 无 IMAP/邮箱体系:只有面向队列的 POP3 取信口,不能当邮箱服务器用;
  • 认证机制有限:服务端 AUTH 实测仅 CRAM-MD5(secrets 文件字段必须写 md5,写 plain 会报 invalid authorisation secret),不支持 PLAIN/LOGIN 裸口令直存;
  • 分发渠道窄:Ubuntu 22.04 / Debian 官方仓库均无 emailrelay 包(已从 Debian 移除),官方也不发布容器镜像,生产部署以源码编译或自建镜像为主;
  • 社区规模小:SourceForge 单作者项目,更新频率低(2.x 系列以年为单位的维护性发版),胜在代码成熟稳定。

七、同类选型对比

查询日期 2026-10-25。「中继」定位与完整 MTA 不直接同级,下表按「能否承担存储转发出口」这一能力对齐比较。

维度EmailRelayPostfixCourier MTAOpenSMTPDmsmtpnullmailer
定位存储转发中继完整 MTA 事实标准一体化邮件套件安全极简 MTA纯 SMTP 客户端最小中继(仅外发)
最新版本2.6.1(2026-02)3.11.x上游 2.0.x 月度发版7.x1.8.x2.2
语言C++CC/C++CCC++
许可GPLv3IPLGPLv3ISCGPLv3GPLv2
收信监听是是是是否是(仅本机队列外发)
队列存储文件对(content+envelope)自有队列自有队列 + Maildir自有队列无队列文件队列
过滤器钩子外部程序 + spamdmilter/前置courierfilterfilter 语法无无
TLS/认证STARTTLS/SMTPS、CRAM-MD5全面全面全面客户端侧全面基础
DKIM/DMARC无原生外挂 opendkim无原生外挂不适用无
Ubuntu 22.04 仓库无包,需源码编译3.6.41.0.16-3build36.8.0p21.8.162.2-3
典型用法弱网网关/本机出口/预处理层生产 MTA小团队全家桶轻量 MTA脚本发信无人值守外发

一句话选型:要完整邮件系统选 Postfix/Courier,要脚本发信选 msmtp,要「收得下、存得住、择机发」的缓冲层选 EmailRelay。三者也可以叠加——EmailRelay 常作为 Postfix/Exchange 前端或本机出口存在。

八、参考链接