2008-11-27 89 views
2

这是一个问题,我相信很容易解决,但我一整天都在砸我的头。当邮件服务器不在网络主机上时,sendmail和MX记录

我正在为客户开发一个新的网站。该网站驻留在(这是一个例子)website.com。我有一个PHP表单脚本来将访问者的请求发送到[email protected]

当我在一个不同的域上的登台服务器上编码时,所有工作正常。当我将它移动到website.com时,邮件消息从未到达。 Web服务器位于具有主要ISP的虚拟主机上。

以下是我从那时起学到的:我的客户的邮件服务器是Microsoft Exchange,位于办公室的物理盒子中。每当外面的人发邮件给[email protected]时,邮件就会到达。 但是如果Web服务器发送到相同的电子邮件地址,则每次都会失败。这是而不是的一个PHP问题。我将shell保护到web服务器,并使用sendmail和UNIX邮件应用程序进行了测试。我还通过电子邮件从shell中的各种电子邮件帐户进行测试。例如,我可以给自己发电子邮件,没有人在website.com域名。

总之,当我登录到website.com时,发送到[email protected][email protected][email protected]都会失败。所有其他地址工作正常。我发现,这些被丢弃的电子邮件会被路由到Web服务器的“catchall”帐户,并放在收件箱中。

我在website.com上完成了MX查找。 MX记录指向mailsec.website.com。我可以telnet到mailsec.website.com端口25并查看SMTP服务器。

在我看来,website.com在将邮件发送到[email protected]时没有进行MX查找。我的理论是,它认为域名是本地域名,它认为没有“请求”用户帐户要将它交付给它,并将邮件放入帐户。我想要的是强制sendmail执行MX查找并将邮件发送到Exchange服务器。我在智慧的最后。我无法弄清楚如何做到这一点。

对于这个问题,我可能在这里的基地,并完全误诊。互联网邮件和MX一直对我来说似乎是一种黑色艺术,我的无知在这个问题上肯定表现出来。

+0

看在http://serverfault.com/questions/98283/sendmail-delivering-locally-instead-of-to-mta-in-mx-record讨论。帕维尔的回应为我做了。 – 2012-02-01 17:35:18

回答

8

我认为问题在于sendmail(您的进程)正在与本地sendmail守护进程交谈。本地的sendmail守护进程认为,因为它是website.com,它应该知道如何发送邮件。不幸的是,to域中的实际地址并不存在于Web服务器上,因此它将其转储到“catchall”邮箱中。您应该与您的ISP通话并让他们更新其sendmail配置,以便发送到... @ website.com的邮件可以转发到邮件交换器,而不是在本地处理。

1

tvanfosson基本上有它,但作为临时的解决方法,你应该能够改变你的脚本,以便邮件'[email protected]',然后邮件将被传递到实际的邮件服务器。

0

编辑tsm.cf文件(在/ etc /邮件/或类似的),以包括

FEATURE(relay_entire_domain) 
的DOMAIN()和MAILER()线之间

。由于您正在编辑文件,因此您可能还希望通过

define(`confPRIVACY_FLAGS',``noexpn,novrfy'') 

更改tsm后。cf文件(或任意 sendmail配置文件),重新启动或SIGHUP sendmail进程。

此更改是必需的,因为域的WWW和MX服务器不存在于相同的进程空间中;这个FEATURE触发sendmail使用它的外部传递机制来处理域的消息。

的tsm.cf文件的编辑部分应类似于此:

DOMAIN(website.com)dnl 
FEATURE(relay_entire_domain)dnl 
define(`confPRIVACY_FLAGS',``noexpn,novrfy'')dnl 
MAILER(smtp)dnl 
MAILER(procmail)dnl 
0

什么工作对我来说是对托管网站的网络服务器添加MX记录,它指向的主机分配的上原来的域名服务器。在这里介绍的情况下将是一个mx记录指向:mailsec.website.com

3

Sendmail默认猜测本地电子邮件域的列表。 它可以使用下面的行放在sendmail.mc文件被关闭:

define(`confDONT_PROBE_INTERFACES',`True') 

由于根目录本地电子邮件域前后的变化之后。

echo '$=w' | sendmail -Am -bt 

你会看到哪些领域应该是“手动”加入到(通常)在/ etc /邮件/本地主机名禁用自动猜测后文件。

P.S.对于sendmail问题,您可以使用news:comp.mail.sendmail

0

我是新来的。想要延长RB_CWI的答案,但我不允许评论。 他的解决方案效果很好。

您是而不是需要定义DOMAIN()。

但是,在我的系统中,我需要安装sendmail-cf软件包。

下面的说明是在的CentOS 6.5完成

首先,安装的sendmail-CF

sudo yum install sendmail-cf 

然后,编辑senmail.mc

sudo vi /etc/mail/sendmail.mc 

在的底部文件添加FEATURE(relay_entire_domain)dnl,所以它看起来像:

... 
FEATURE(relay_entire_domain)dnl 
MAILER(smtp)dnl  # right above this line 
MAILER(procmail)dnl 
dnl MAILER(cyrusv2)dnl 

保存该文件,然后重新启动sendmail。

sudo service sendmail restart 
相关问题