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

我有一个Web服务器被列入黑名单发送电子邮件,因为它与localhost.localdomain而不是我的服务器(我们称之为example.com )域名响应SMTP HELO 。 我可以通过从/etc/hosts文件中删除localhost.localdomain来使服务器通过example.com响应HELO 。 然而,现在我每次尝试发送电子邮件到具有相同域名的地址,sendmail都试图在本地发送邮件,而不是通过SMTP发送到我们的实际邮件服务器(托pipe在Rackspace)。

我遵循这里的build议: 为什么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认为所有这些域是本地的。 我在sendmail.cf文件中设置了DontProbeInterfaces=True 。 现在当我跑步

 sendmail -bt $=w 

我得到:

 localhost [127.0.0.1] example.com 

我也尝试从/etc/mail/local-host-names删除example.com ,但是sendmail仍然认为example.com是本地的。 我怎样才能让sendmail停止尝试本地邮件传递example.com电子邮件地址?

编辑:

 echo '$j' | sendmail -bt 

产生

example.com

编辑:

我尝试将example.com的主机名更改为example ,但是现在,我的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 

修复你的服务器的主机名。 没有服务器应该有一个主机名等于裸域名 ; 这只是当你这样做时发生的许多问题之一。

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

推荐的修正:
不要使用“命名的域”作为主机名(如迈克尔回复中所build议的)
要么
将sendmail使用的名称更改为“此主机邮件名”

看到@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参数中删除完全限定的域名。