我已设置sendmail
为侦听端口 1234 而不是 25,只需更改为sendmail.mc
:
DAEMON_OPTIONS(`Port=1234, Name=MTA')
这通常有效,但有一个例外。背景是我有一个relay监听25端口(relay必须有MX记录,所以一定是25端口)。中继通过 sendmail 发送邮件,因此 sendmail 监听localhost:1234
. 也就是说,sendmail 只负责发送邮件,不负责接收。netstat
/etc 确认中继正在监听 25,而 sendmail 正在监听 1234。
这适用于这两个测试用例:
- 我可以通过 telnet 发送电子邮件到 sendmail (
telnet localhost 1234
) s-nail
我可以通过适当的配置更改发送电子邮件(set mta=smtp://localhost:1234
)
但是,如果我直接运行 sendmail ,则此设置不起作用:
sendmail -d8.20 -vt < test-email.txt
在这种情况下,sendmail 尝试通过连接到本地端口 25 来发送邮件,因此它实际上与本地中继通信,而不是远程 SMTP 服务器。调试输出显示:
[email protected]... Connecting to [127.0.0.1] via relay...
220 mydomain.org ESMTP mydomain relay
这让我很困惑——知道这里发生了什么吗?
编辑
取得一些进展。我在 Sendmail 8.15.2,Ubuntu 20.04 上。这个问题并不重要,除了 sendmail 用每 20 分钟运行一次的 cron 作业刷新它的 MSP 队列,所以我得到很多 syslog 失败条目,以及无法投递的电子邮件的大队列,因为 sendmail 找不到自己。
问题似乎如下。当您使用 sendmail 发送邮件(或管理队列)时,它(通常)是一个两步过程。您运行 sendmail,它读取submit.cf
(而不是 sendmail.cf
),并充当 MSA,将邮件提交给某物。那个东西通常是本地的 sendmail 守护进程,它会sendmail.cf
在它启动时读取。
sendmail.cf
告诉 sendmail 它需要监听localhost:1234
传入的邮件。这意味着它submit.cf
必须包含一个配置,告诉 sendmail 程序将外发邮件路由到localhost:1234
.
相关submit.mc
配置可能是FEATURE
msp
,默认为
FEATURE(`msp', `[127.0.0.1]', `25')
所以答案大概就是把 25 改成 1234 这么简单。不过,没那么容易。只需更改它、重新生成文件并重新启动 sendmail,就没有什么区别。事实上,使用其中一个或两个重新生成submit.cf
完全m4
为零make
差异,或者为您提供一个cf
带有注释掉的功能的文件。某处有一些魔法可以让您更改功能,但我不知道是什么。答案可能在/usr/share/sendmail/cf/feature/msp.m4,但我看不到。
从命令行运行 sendmail,它使用不同的配置文件。
编辑文件“submit.mc”
添加行:
行前:
然后将“submit.mc”编译为“submit.cf”。