在Sendmail中禁用本地传送

我在Centos服务器上使用Sendmail发送PHP脚本的电子邮件,但问题是邮件被传递到本机上的本地邮箱,而不是MXlogging中为域指定的内容 – 实际上指向另一台机器I用于电子邮件。

我希望sendmail不要尝试在本地为本机设置的域提供邮件,有没有简单的方法来禁用本地交付?

该域不在本地主机名文件中。

我已经做了大量的search,我已经看了:

Sendmailconfiguration不传递邮件到本地机器

在Sendmail中禁用本地传送

但是要么没有答案,要么不适合。

我不想转发到另一台服务器,我只是希望它发送邮件,而不pipe域名。

举个例子:

我有两个服务器,一个是mail.example.com上的邮件服务器,另一个是web服务器,当我在web服务器上使用smtp服务时,它当前将邮件路由到example.com上的本地邮箱,但是它应该去mail.example.com上的邮箱

sendmail -bt的输出返回:

地址testing模式(规则集3不自动调用)
input  
 > 3,0 [email protected]
 canonifyinput:info @例子。  COM
 Canonify2input:信息 
 Canonify2返回:info 
 canonify返回:info 
parsinginput:信息 
 Parse0input:信息 
 Parse0返回:info 
 ParseLocalinput:信息 
 ParseLocal返回:info 
parsing1input:信息 
 Parse1返回:$#local $:info
parsing返回:$#local $:info

我做了什么来禁用本地交付。 我将使用example.com域。

要求:

  • example.com指向分配给其中一个eth接口的IP地址的条目。
  • / etc / hosts将example.com分配给与上面相同的IP地址
  • example.com指向Google服务器的MXlogging(ASPMX.L.GOOGLE.COM等)
  • 默认的sendmail安装(我的是在Ubuntu上)

脚步:

vim /etc/mail/sendmail.mc 

最后:

 define(`MAIL_HUB', `example.com.')dnl define(`LOCAL_RELAY', `example.com.')dnl 

接着:

 sendmailconfig (or /etc/mail/make depending on your distro) service sendmail restart 

testing:

 echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v 

你应该看到它连接到谷歌服务器,然后你应该看到你的邮件被传递到你的谷歌收件箱。

感谢sporker和Pawel,你让我朝着正确的方向去解决这个问题。

我原来的问题是,sendmail正在考虑我的域example.com电子邮件帐户作为本地帐户。

这些链接certificate非常有用: Sendmail到本地域忽略MXlogging(第2部分) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-的sendmail-忽略-mailertable的几家,半局部-domains.html

但在我的情况下,使用FreeBSD 8.2,真正的诀窍是:

# cd /etc/mail

# vim freebsd.mc

添加这两行:

 define(`MAIL_HUB', `example.com.')dnl define(`LOCAL_RELAY', `example.com.')dnl 

就在之前:

 MAILER(local) MAILER(smtp) 

# make

—这是输出—

  cp freebsd.mc host.example.com.mc /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf cp freebsd.submit.mc host.example.com.submit.mc /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf 

—输出结束—

# cp sendmail.cf sendmail.cf.bak

# cp host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

希望这可以让一些人头疼。

我不是一个sendmail的人,但我确实相信sendmail会将存储在/etc/mail/local-host-names任何域视为本地域名。
你可以尝试清空这个文件,(不要删除它)并重新启动sendmail,看看你如何去。

编辑
我提到的文件名实际上是在sendmail.cf设置的,而你的文件名可能不是local-host-names
请在/etc/mail/sendmail.cf查找

 # file containing names of hosts for which we receive email Fw/etc/mail/local-host-names 

这不是以任何方式testing的事实,但只是我大声思考。

这可能不是你正在寻找的解决scheme,但如果你的问题是,“pipe理员”或“根”用户收到大量的电子邮件和一个巨大的邮箱,你可能会考虑设置一个cron作业来清除邮箱每周,每天等

我们有几个CentOS服务器,但是有时候我们希望能够阅读邮件,因为它有时可以帮助诊断各种问题。

解决的办法是简单地按计划工作,并在一段时间内擦拭盒子。

如果我们发现一个问题,我们会暂时将cron作业注释掉,然后通过日志和电子邮件读取线索。

只是一个想法…和快速/简单的解决scheme。

如果不是,请查看sendmail.mc文件并进行相应的修改。


快速更新:

这不完全是你要求的,但可能会给你一些想法,并帮助给你一些事情:

http://www.pettingers.org/code/sendmail-local.html

我个人更多的是一个后缀的人,但这听起来很像你已经configuration发送服务器接收@ yourdomain.com的邮件。 如果在postfix中有一个相当于传输机制的sendmail,那就是我在我的服务器内部路由邮件的方法。

看起来像你的规则集3剥离域信息。 我在下面列出了一些常规故障排除步骤。 如果这不起作用,你将不得不发送你的sendmail.cf来看看。

从输出中,example.com被视为本地域。 做一个nslookup:

设q = mx

domain.com

如果这给了本地机器的IP地址,那么你需要看看你的DNS。 另外在/ etc / hosts中查看,以确保没有列出domain.com。

它也似乎剥离了@ domain.com,你可以请用类似于[email protected]来看看它是否也列出它作为本地域名。

同时检查sendmail.cf文件中的Cw值。

可能不是你想要的,但是SSMTP对于只能出站的服务器来说非常好,你可以指定一个邮件中心。

如果您希望在尝试传递到本地地址时返回错误,则可以使用访问地图等:

@your.domain error:nouser 550 No such user here

如果您希望电子邮件被“传送”但被丢弃,您可以安装一个virtusertable条目,将“ @your.domain ”的所有内容都别名为dev-null。 在本地保持至less“ root ”的交付可能是有用的,因为它通常是来自cron作业的电子邮件报告的接收者等。在你的virtusertable尝试这样的:

[email protected] local:root

@your.domain local:dev-null

使用将消息redirect到/ dev / null的本地dev-null别名,它应该继续提供根邮件,但是会丢弃传递给其他用户的邮件。

Pawel的解决scheme为我工作,但sendmailconfig不存在于centos,所以我不得不跑

 cd /etc/mail m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf service sendmail restart 

获取configuration更新

只是确认帕维尔的答案解决了我非常类似的问题。

对于任何使用FreeBSD但对sendmail cf file drudgery不太感兴趣的人来说,下面的顺序就是你用来在Pawel的例子中添加这两行的顺序:

 cd /etc/mail make conf (generates stock .mc/.cf files with the hostname as part of the filename - these will NOT be overriten during an upgrade) vi hostname.mc (add the two lines to the .mc file right above the last two "MAILER" lines) make conf cp hostname.cf sendmail.cf /etc/rc.d/sendmail restart 

我遵循了这些build议,并且注意到只要加上那个pawel提到的步骤,

“/ etc / hosts定义的example.com被分配到与上面完全相同的IP地址”,基本上我把我的服务器IP加上servername加到/etc/hosts文件,就是这样。

足以让我通过谷歌邮件路由,并回到我的电子邮件。

如果使用Cpanel / WHM来pipe理服务器,请确保在Cpanel / WHM中select远程邮件交换器,而不是自动检测configuration。 远程邮件交换器将通过包括本地域的MXlogging发送所有电子邮件。 使用自动,本地域名电子邮件将直接在本地路由,不会发送到MXlogging中定义的外部服务器。