我如何强制 sendmail 使用 SMTP 而不是内部中继?

我如何强制 sendmail 使用 SMTP 而不是内部中继?

我有一个 Web 服务器,由于它响应的是 而不是我的服务器的域名(我们将其称为 ),因此被列入了发送电子邮件的黑名单SMTP HELOlocalhost.localdomainexample.com能够通过从我的文件中删除HELO来让服务器响应 。但是,现在每当我尝试向具有相同域名的地址发送电子邮件时,sendmail 都会尝试在本地传递邮件,而不是通过 SMTP 将其发送到我们的实际邮件服务器(托管在 Rackspace)。example.comlocalhost.localdomain/etc/hosts

我遵循了这里的建议:为什么 sendmail 接受本地主机名文件中不存在的主机名的邮件?然后跑了

echo '$=w' | sendmail -bt

并得到:

[mail]
[162.243.XX.XXX]
mail
[mail.example.com]
mail.example.com
localhost
[127.0.0.1]
example.com

据我所知,sendmail 将所有这些域视为本地域。我DontProbeInterfaces=True在我的sendmail.cf文件中设置。现在当我运行

sendmail -bt
$=w

我得到:

localhost
[127.0.0.1]
example.com

我也尝试过从example.com中删除/etc/mail/local-host-names,但 sendmail 仍然认为这example.com是本地的。如何让 sendmail 停止尝试向example.com电子邮件地址进行本地邮件投递?

编辑:

echo '$j' | sendmail -bt

生产

example.com

编辑:

我尝试将主机名从 更改example.comexample,但现在我的SMTP HELO响应是localhost,并且发送电子邮件需要几分钟。根据此:https://www.digitalocean.com/community/questions/sendmail-is-slow-to-send-mail sendmail预计hostname是 FQDN,但我被告知它应该绝不是 FQDN。它是哪一个?

这是我的mail.log

Jul 28 16:40:01 localhost sm-msp-queue[1679]: My unqualified host name (localhost) unknown; sleeping for retry
Jul 28 16:41:01 localhost sm-msp-queue[1679]: unable to qualify my own domain name (localhost) -- using short name

答案1

修复您的服务器的主机名。任何服务器都不应该有与裸域名相同的主机名;这只是执行此操作时发生的众多问题之一。

答案2

在您的情况下,Sendmail 会将自动配置的“此主机(电子邮件)名称”($j)添加到本地电子邮件域列表($=w)。Sendmail 使用 报告的名称hostname --fqdn

建议修复:
不要使用“命名域”作为主机名(如 Michael 回复中所建议的)
或者
将 sendmail 使用的名称更改为“此主机邮件名称”

答案3

看到@poige 的评论后我的理智恢复了:

删除sendmail。安装postfix。这里有一个很好的教程:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-14-04

然后从参数中编辑/etc/postfix/main.cf并删除完全限定域名mydestination

相关内容