我在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域。
要求:
脚步:
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文件并进行相应的修改。
快速更新:
这不完全是你要求的,但可能会给你一些想法,并帮助给你一些事情:
我个人更多的是一个后缀的人,但这听起来很像你已经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中定义的外部服务器。