该服务器安装了 sendmail 和 postfix。Sendmail 一直在运行,但无法正常工作。我停止了 sendmail 服务并启动了 postfix。通过检查端口 25 上的监听输出,确认只有 postfix 在运行。
lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 119640 root 12u IPv4 28103863 0t0 TCP localhost:smtp (LISTEN)
master 119640 root 13u IPv6 28103864 0t0 TCP localhost:smtp (LISTEN)
然后我测试发送邮件:
echo "My message" | mail -s testing [email protected]
它没有到达 root 的收件箱。因此,我查看了 /var/log/maillog 中的日志,发现 sendmail 仍在使用中:
Feb 26 16:18:13 server sendmail[1582]: w1QLIC8N001582: [email protected], ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30233, relay=exchangeserver.domain. [x.x.x.x], dsn=2.0.0, stat=Sent (<201802262118.w1QLIC8N001582@[email protected]> Queued mail for delivery)
这怎么可能?
答案1
程序mail
运行sendmail
以传递邮件(在客户端模式下,进程中没有打开任何监听端口)。阅读手册页有关详细信息。您可以通过设置变量来更改 MDA sendmail
:
发送邮件
要使用备用邮件传递系统,请将此选项设置为要使用的程序的完整路径名。应谨慎使用。
$ sendmail=/usr/bin/someothersendmail mail [email protected]
Subject: asdf
... and so on
但是由于 mail 希望 MDA 能够识别 sendmail 的选项,所以我并不真正明白它的用处。
另一种可能性是使用外部 SMTP 服务器代替sendmail
。
$ echo "This is the message body and contains the message" | mailx -v \
> -r "[email protected]" \
> -s "This is the subject" \
> -S smtp="mail.example.com:587" \
> -S smtp-use-starttls \
> -S smtp-auth=login \
> -S smtp-auth-user="[email protected]" \
> -S smtp-auth-password="abc123" \
> -S ssl-verify=ignore \
> [email protected]
答案2
此日志行不是来自任何监听 TCP 端口 25 的程序。看起来 rootcrontab
正在通过 sendmail 直接提交邮件。或者它是某个非标准的 root 拥有的后台进程。