it-swarm.cn

在Sendmail中禁用本地传递

我在Centos服务器上使用Sendmail来发送PHP脚本)的电子邮件,但是问题是邮件传递到了计算机上的本地邮箱,而不是MX记录中指定的域-实际指向我用于发送电子邮件的另一台计算机。

我希望sendmail不要尝试为设置了计算机的域本地发送邮件,是否有一种简单的方法来禁用本地发送?

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

我已经做了大量的谷歌搜索,并查看了:

发送邮件配置以不将邮件传递到本地计算机

在Sendmail中禁用本地传递

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

我不想中继到另一台服务器,我只希望它发送邮件而不管域。

举个例子:

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

Sendmail -bt的输出返回:

地址测试模式(规则3不会自动调用)
输入
> 3,0 [email protected] 
规范输入:info @ example。 com 
 Canonify2输入:info 
 Canonify2返回:info 
 canonify返回:info 
 parse输入:info 
 Parse0输入:info 
 Parse0返回:info 
 ParseLocal输入:info 
 ParseLocal返回:info 
 Parse1输入:info 
 Parse1返回:$#local $:info 
解析返回:$#本地$:信息
31
user6091

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

要求:

  • example.com指向分配给eth接口之一的IP地址的条目。
  • 定义example.com的/ etc/hosts分配给与上述相同的IP地址
  • example.com MX记录指向Google服务器(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

测试:

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

您应该看到它正在连接到Google服务器,然后您应该看到邮件已经传递到Google收件箱。

38
Paweł Gościcki

多亏了sporker和Pawel,您才使我朝着正确的方向发展。

我最初的问题是sendmail正在将我的域example.com电子邮件帐户视为本地帐户。

这些链接证明非常有用: 将邮件发送到忽略MX记录的本地域(第2部分)http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382。 htmlhttp://objectmix.com/sendmail/367920-sendmail-ignores-mailertable-some-semilocal-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

希望这可以减轻某些人的头痛。

4
estepix

我不是sendmail的人,但我确实相信sendmail会将/etc/mail/local-Host-names中存储的任何域都视为本地域名。
您可以尝试清空此文件(请勿删除),然后重新启动sendmail并查看操作方法。

[〜#〜] edit [〜#〜]
我提到的文件名实际上是在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    

这绝不是经过检验的事实,只是我大声思考。

1
aussielunix

只是确认Pawel的答案解决了我非常相似的问题。

对于使用FreeBSD但又不想过多参与sendmail cf文件工作的人员,以下顺序是在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
0
sporker

如果使用Cpanel/WHM管理服务器,请确保选择Cpanel/WHM中的“远程邮件交换器”,而不是“自动检测配置”。远程邮件交换器将通过MX记录(包括本地域)发送所有电子邮件。使用自动,本地域电子邮件将直接发送到本地,并且不会发送到MX记录中定义的外部服务器。

0
Ali Poonawala

可能不是您想要的,但是SSMTP非常适合仅用于出站服务器,您可以在其中指定邮件中心。

0
Trevor Harrison

这可能不是您要寻找的解决方案,但是如果您的问题是“管理员”或“ root”用户收到大量电子邮件和巨大的邮箱,则不妨考虑设置cron作业来清除邮箱每周,每天等.

我们有几台CentOS服务器都遇到此问题,但问题是我们希望有时能够读取邮件,因为它有时可以帮助诊断各种问题。

解决的方法是简单地执行作业并偶尔擦拭盒子。

如果发现问题,我们将暂时淘汰cron作业,并仔细阅读日志和电子邮件以获取线索。

只是一个想法...一个快速/简便的解决方案。

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


快速更新:

这并不是您所要的,但可能会给您一些想法并帮助您了解一些事情:

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

0
KPWINC

我个人更像是一个后缀者,但这听起来很像您已配置发送服务器以接收@ yourdomain.com的邮件。如果在postfix中有一个等同于传输机制的sendmail,这就是我用来在服务器之间内部路由邮件的方式。

0
Greeblesnort

如果要在尝试传递到本地地址时返回错误,则可以使用访问映射和类似方法:

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

如果您希望电子邮件被“传递”但被丢弃,则可以安装virtusertable条目,为“ @your.domain“到dev-null。保持本地至少发送“ root”可能很有用,因为它通常是来自cron作业等的电子邮件报告的接收者。请在virtusertable

[email protected] local:root

@your.domain local:dev-null

与本地dev-null别名,它将消息重定向到/ dev/null,这应该继续传递根电子邮件,但丢弃传递给其他用户的消息。

0
gkeramidas

似乎您的Ruleset 3剥夺了域信息。我在下面提供了一些常规的故障排除步骤。如果这样做不起作用,则必须将sendmail.cf发送给我,以进行查看。

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

设置q = mx

domain.com

如果这提供了本地计算机的IP地址,则您需要查看您的dns。还要查看/ etc/hosts以确保没有列出domain.com。

它似乎也剥夺了@ domain.com,请您尝试使用类似[email protected]之类的内容来查看它是否也将其列为本地域。

还要检查sendmail.cf文件中的Cw值。

0
Francois Wolmarans

我遵循了这些建议,并注意到只是增加了Pawel提到的步骤

“/etc/hosts定义example.com分配给与上面相同的IP地址”,基本上,我在/etc/hosts文件,仅此而已。

足以让我通过Google路由电子邮件并返回到我的电子邮件。

0
user737133

Pawel的修复程序对我有用,但sendosconfig在centos上不存在,因此我必须运行

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

更新配置

0
Joshua Vial