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。

EmailRelayEmailRelaySMTPUbuntu2026/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 移除
Windows2.6.1emailrelay-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

十、参考链接