EmailRelay 2.6.1 Ubuntu 22.04 安装指南
EmailRelay 2.6.1 Ubuntu 22.04 安装指南:官方源码包在线编译与离线介质编译两方案(sha256 校验、libssl-dev/libpam0g-dev 编译期裁剪坑、configure 警告对照)、systemd 单元托管、as-server/as-proxy swaks 端到端与管理口验收实测。实测日期 2026-10-25。
EmailRelay 2.6.1 Ubuntu 22.04 安装指南
目标:在 Ubuntu 22.04 上从官方源码包编译安装 EmailRelay 2.6.1,含在线与离线两种方案、systemd 托管与收发验证。已在 Ubuntu 22.04 LTS(x86_64)实测通过,实测日期 2026-10-25。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS(jammy,x86_64)
- 软件版本:EmailRelay 2.6.1(上游最新稳定版,2026-02-02 发布)
- 源码包:
emailrelay-2.6.1-src.tar.gz(1,607,267 字节) - SHA256:
a0bcd88179a6545817b670b1ed6d6aac7c4dae90fabd220ef08d3f6743b69e9c - 安装前缀:
/usr/local(二进制在/usr/local/sbin/,配置样例在/usr/local/etc/) - 验证工具:swaks v20201014.0(
apt install swaks)
二、前置条件
先说结论:Ubuntu 22.04 官方仓库没有 emailrelay 包(apt-cache policy emailrelay 无结果,jammy universe 已启用;该包已从 Debian 移除),官方也不发布二进制 deb/rpm,因此本文两个方案都从官方源码包编译,区别只在于「编译机能否联网」。
编译依赖四个包:
sudo apt-get update
sudo apt-get install -y build-essential wget ca-certificates libssl-dev libpam0g-dev
libssl-dev:不装则 configure 警告missing openssl/mbedtls - no transport layer security,编译出的二进制没有 TLS 能力;libpam0g-dev:不装则警告missing pam - no support for pam authentication;- 装齐后 configure 仅剩
missing qt - will not build graphical user interface一条警告——Qt 只影响图形界面,服务端形态不受影响,可忽略。
验证用客户端(可选):sudo apt-get install -y swaks。
三、版本选型说明
| 渠道 | 版本 | 说明 |
|---|---|---|
| 上游源码包(本文) | 2.6.1 | 唯一 Linux 交付形态,功能完整(TLS/PAM 取决于编译期依赖) |
| Ubuntu 22.04 官方仓库 | 无 | apt-cache policy emailrelay 无候选 |
| Debian 仓库 | 无 | 已从 Debian 移除 |
| Windows | 2.6.1 | emailrelay-2.6.1-w64.zip,不在本文范围 |
四、方案 A:在线源码编译(推荐)
4.1 方案说明
编译机直接访问 SourceForge 下载源码包,校验后本地编译安装。适合可联网的生产/测试服务器。
4.2 下载与校验
cd /tmp
wget https://downloads.sourceforge.net/project/emailrelay/emailrelay/2.6.1/emailrelay-2.6.1-src.tar.gz
echo "a0bcd88179a6545817b670b1ed6d6aac7c4dae90fabd220ef08d3f6743b69e9c emailrelay-2.6.1-src.tar.gz" | sha256sum -c -
回显:
emailrelay-2.6.1-src.tar.gz: OK
4.3 编译与安装
tar -xzf emailrelay-2.6.1-src.tar.gz
cd emailrelay-2.6.1
./configure --prefix=/usr/local
make -j"$(nproc)"
sudo make install
make 收尾时会提示 use "make unity" or "make small" for a unity build,仅是加速再编译的建议,忽略即可。
安装产物(make install 实际落位):
/usr/local/sbin/emailrelay # 主守护进程(三形态合一)
/usr/local/sbin/emailrelay-passwd # 认证摘要生成工具
/usr/local/sbin/emailrelay-submit # 命令行投信工具
/usr/local/etc/emailrelay.conf # 668 行全注释配置样例
/usr/local/etc/emailrelay.auth # 认证凭据样例
/usr/local/share/doc/emailrelay/ # AUTHORS/NEWS/README/ChangeLog
验证版本:
$ emailrelay --version
E-MailRelay V2.6.1
Copyright (C) 2026 Graeme Walker
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)
(版本输出尾部为版权与许可声明行,此处略。)
五、方案 B:离线介质编译(断网服务器)
5.1 方案说明
目标机不能联网时,在一台同版本 Ubuntu 22.04 联网机上准备源码包与依赖 deb,用介质拷贝到目标机编译。EmailRelay 依赖少,离线工作量很小。
5.2 联网机准备介质
mkdir -p ~/emailrelay-offline && cd ~/emailrelay-offline
# 源码包
wget https://downloads.sourceforge.net/project/emailrelay/emailrelay/2.6.1/emailrelay-2.6.1-src.tar.gz
# 编译依赖 deb(含依赖链)
apt-get download $(apt-rdepends build-essential libssl-dev libpam0g-dev 2>/dev/null \
| grep -v "^ " | grep -v "^libc-dev$" | sort -u)
# 若联网机无 apt-rdepends:apt-get install -y apt-rdepends,或改用
# apt-get install --download-only --reinstall -y build-essential libssl-dev libpam0g-dev
# 然后收集 /var/cache/apt/archives/*.deb
tar -czf emailrelay-2.6.1-offline.tar.gz .
5.3 目标机安装
mkdir -p /tmp/emailrelay-offline && tar -xzf emailrelay-2.6.1-offline.tar.gz -C /tmp/emailrelay-offline
cd /tmp/emailrelay-offline
sudo dpkg -i *.deb || sudo apt-get -f install # 若有本地依赖缺失按提示补齐
tar -xzf emailrelay-2.6.1-src.tar.gz
cd emailrelay-2.6.1
./configure --prefix=/usr/local
make -j"$(nproc)"
sudo make install
后续配置、托管、验证与方案 A 完全一致。
5.4 方案对比与选择建议
| 维度 | 方案 A 在线编译 | 方案 B 离线介质编译 |
|---|---|---|
| 是否需联网 | 编译机需联网 | 仅准备介质的机器联网 |
| 依赖处理 | apt 自动 | dpkg 手动,注意依赖链 |
| 安装结果 | 完全一致 | 完全一致 |
| 适用 | 可联网服务器 | 内网隔离/审计环境 |
两个方案产物相同(同一份源码、同一 configure 参数),选择只看目标机网络条件。
六、基础配置与 systemd 托管
6.1 准备目录与配置文件
sudo mkdir -p /var/spool/emailrelay /var/log
sudo cp /usr/local/etc/emailrelay.conf /usr/local/etc/emailrelay.conf.bak # 留底样例
EmailRelay 的每个命令行选项都可写进配置文件(选项与配置文件键一一对应,668 行样例全部注释掉了)。最小运行甚至不需要配置文件,全部走命令行;生产建议落一份 /usr/local/etc/emailrelay.conf 便于审计。参数细节见《EmailRelay 2.6.1 配置参数详解》。
6.2 systemd 单元(生产推荐)
/etc/systemd/system/emailrelay.service:
[Unit]
Description=E-MailRelay store-and-forward SMTP relay
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/emailrelay --as-proxy 127.0.0.1:10026 \
--port 10025 --spool-dir /var/spool/emailrelay \
--log --log-time --no-syslog --verbose --no-daemon \
--pid-file /run/emailrelay.pid --user daemon
PIDFile=/run/emailrelay.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target
托管:
sudo systemctl daemon-reload
sudo systemctl enable emailrelay
sudo systemctl start emailrelay
sudo systemctl is-active emailrelay
⚠️ 注意:
--as-proxy/--as-server宏选项隐含--close-stderr(启动后关闭 stderr,日志只进 syslog)。无 syslog 守护的最小化环境想保留 stderr 日志,把宏展开为等价显式参数并加--no-syslog(如上单元的写法),日志即留在 stderr,可被 systemd journal 捕获。展开等价关系见《EmailRelay 2.6.1 配置参数详解》。
七、运行验证(实测回显)
以下回显均为 2.6.1 在 Ubuntu 22.04 上的真实输出。完整拓扑:10026 端口跑存储守护模拟上游,10025 端口跑转发代理。
7.1 起存储守护(模拟上游)
sudo 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
7.2 起转发代理
sudo 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
7.3 swaks 端到端发信
$ swaks --server 127.0.0.1:10025 --from alice@example.org --to bob@example.com \
--h-Subject "hello" --body "test"
=== Trying 127.0.0.1:10025...
=== Connected to 127.0.0.1.
<- 220 ubuntu-server -- E-MailRelay V2.6.1 -- Service ready
-> EHLO ubuntu-server
<- 250-ubuntu-server says hello
<- 250-VRFY
<- 250-PIPELINING
<- 250 8BITMIME
-> MAIL FROM:<alice@example.org>
<- 250 sender <alice@example.org> OK
-> RCPT TO:<bob@example.com>
<- 250 recipient <bob@example.com> OK
-> DATA
<- 354 start mail input -- end with <CRLF>.<CRLF>
-> (DATA 段邮件头与正文发送行,此处略)
<- 250 message processed
-> QUIT
<- 221 OK
=== Connection closed with remote host.
上游队列出现文件对即转发成功:
$ ls /var/spool/emailrelay-sink/
emailrelay.1.1792906643.1.content emailrelay.1.1792906643.1.envelope
7.4 管理接口查状态
$ printf 'status\nquit\n' | nc 127.0.0.1 10027
LISTEN: 0.0.0.0:10025
LISTEN: ::.10025
LISTEN: 0.0.0.0:10027
LISTEN: ::.10027
OUT started: 1
OUT finished: 1
IN started: 3
IN finished: 2
(管理口需启动时加 --admin 10027。)
八、常见问题
Q1:apt install emailrelay 报「Unable to locate package」?
Ubuntu 22.04 及 Debian 仓库均已无此包,只能按本文源码编译。这不是软件源配错,换任何 apt 源都无效。
Q2:编译出来的程序不支持 STARTTLS / AUTH?
编译期缺 libssl-dev / libpam0g-dev。configure 输出里出现 missing openssl/mbedtls、missing pam 警告即为裁剪;装上对应 -dev 包后重新 ./configure && make && sudo make install 即可。
Q3:启动后日志文件里只有启动初期的几行,之后的收发记录没有?
--as-proxy/--as-server 隐含 --close-stderr,启动后 stderr 被关闭;同时 --log 默认双写 stderr 与 syslog。若机器上没有可用的 syslog 守护,后续日志就丢了。解法:显式展开宏选项、去掉 --close-stderr 并加 --no-syslog,或配 --log-file(见 5.2 与配置详解篇)。
Q4:configure 报 missing qt?
仅影响图形界面,服务端不受影响,忽略。
九、卸载与清理
源码安装无包管理记录,按产物清单删除即可:
sudo systemctl stop emailrelay 2>/dev/null; sudo systemctl disable emailrelay 2>/dev/null
sudo rm -f /etc/systemd/system/emailrelay.service && sudo systemctl daemon-reload
sudo rm -f /usr/local/sbin/emailrelay /usr/local/sbin/emailrelay-passwd /usr/local/sbin/emailrelay-submit
sudo rm -rf /usr/local/etc/emailrelay.conf* /usr/local/etc/emailrelay.auth /usr/local/share/doc/emailrelay
sudo rm -rf /var/spool/emailrelay /var/spool/emailrelay-sink /var/log/emailrelay*.log
十、参考链接
- 官方文档站:https://emailrelay.sourceforge.net/
- 源码包下载:https://downloads.sourceforge.net/project/emailrelay/emailrelay/2.6.1/emailrelay-2.6.1-src.tar.gz
- SourceForge 项目页:https://sourceforge.net/projects/emailrelay/
- 本专栏:《EmailRelay 2.6.1 介绍与选型指南》《EmailRelay 2.6.1 Docker Compose 部署指南》《EmailRelay 2.6.1 配置参数详解》《EmailRelay 2.6.1 常用 CLI 命令详解》