sendmail 忽略 SMART_HOST

sendmail 忽略 SMART_HOST

我们有一个内部网络,该网络有自己的 DNS 服务器。除某些可访问 Internet 的服务器外,该网络上未解析 Internet 地址。

其中一台可访问互联网的服务器充当其他服务器的中继主机,以便他们可以向管理员发送电子邮件(报告、日志监视等)。该中继服务器还有一个在互联网上定义的中继服务器,但这并不相关。除了一个奇怪的例外之外,这种方式工作得很好。

我在其中一台使用中继主机的服务器上安装了 Oracle Linux 8。通常我必须添加

define(`SMART_HOST', `relay_hostname')dnl

到sendmail.mc,但在这个上它不起作用。我无法让它使用继电器。它始终中继到root@localhost.至少它是这样写的/var/log/maillog。我尝试了[relay_hostname]relay:[relay_hostname]forSMART_HOST和许多其他配置设置。

当我测试时

mail -s test [email protected]

邮件日志报告如下:

Aug 31 09:44:14 hostname sendmail[694964]: 17V9iE4L694964: [email protected], size=15, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Aug 31 09:44:14 hostname sendmail[694964]: 17V9iE4L694964: [email protected], delay=00:00:00, mailer=relay, pri=30015, dsn=4.4.3, stat=queued

在这种情况下,消息不会最终进入队列。

我也尝试用发送邮件

(echo subject: test; echo) | /usr/lib/sendmail -Am -v [email protected] [email protected]

通过这个命令我得到了答案

internet-domain.com: Name server timeout
[email protected]... Transient parse error -- message queued for future delivery
[email protected]... queued

在这种情况下,日志实际上是相同的

Aug 31 11:42:43 hostname sendmail[698071]: 17VBghos698071: [email protected], size=15, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Aug 31 11:42:43 hostname sendmail[698071]: 17VBghos698071: [email protected], delay=00:00:00, mailer=relay, pri=30015, dsn=4.4.3, stat=queued

消息通过 sendmail 命令进入队列,但永远保留在那里。

无法解析 internet-domain.com 是正确的。我猜问题是 internet-domain.com 无法解析,并且 sendmail 在这种情况下不使用 SMART_HOST。如何强制 sendmail 始终使用 SMART_HOST 来处理收件人未解析的域?拒绝目标地址错误的消息应该是中继的工作。

我在 CentOS 8 上配置了相同的 sendmail,它可以通过中继发送电子邮件。不同之处在于 CentOS 8 可以解析 Internet 域。


更新。如果我向 Internet 域发送邮件,sendmail 将使用 localhost 作为中继,邮件将无处可去,如上所述。

如果我将其发送到可以通过内部 DNS 进行内部解析的域,则会将其发送到定义为 SMART_HOST 的中继服务器。中继服务器对其进行中继。但是,这不是有效的互联网域,并且电子邮件帐户不存在。因此,地址错误的邮件无法投递,我收到了一份报告,其中包含无法投递的邮件作为附件。


另一个更新。如果我添加

FEATURE(nocanonify)dnl

/etc/mail/sendmail.mc,部分邮件通过。如果我发送到有效的互联网邮件,它仍然无法通过。但是,我有一个别名,它root指向/etc/aliases我正在使用邮件命令测试的同一地址。如果我向 发送邮件root,它就会通过,因为别名会重定向它。在这种情况下,互联网电子邮件不会混淆 sendmail,并且智能主机将用于中继。这对我来说已经足够了,因为我只需要来自该服务器的 root 管理邮件,但问题仍然没有完全解决。

/etc/别名:

# Person who should get root's mail
root:       [email protected]

答案1

我找到了一个解决方案,现在我记得我不久前在 CentOS 5 上使用过该解决方案。但是,它对我来说似乎并不那么重要,因为我确信自上次使用它以来事情已经发生了很大变化。我很确定它当时表现出不同的行为,但解决方案是相同的。

解决方案是在 中添加(取消注释)以下行/etc/mail/submit.mc

define(`confDIRECT_SUBMISSION_MODIFIERS',`C')dnl

我认为问题中描述的以下行作为尝试之一/etc/mail/sendmail.mc也应该在 中。

FEATURE(nocanonify)dnl

相关内容