这是一个我确定很容易修复的问题,但我一整天都在喋喋不休。
我正在为客户开发一个新的网站。该网站位于(这是一个例子)website.com。我有一个PHP表单脚本,通过电子邮件将访问者的请求发送到requests@website.com。
当我在不同域上的登台服务器上编码时,一切正常。当我将它移动到website.com时,邮件消息从未到达。 Web服务器位于具有主要ISP的虚拟主机上。
以下是我从那时起学到的东西:我的客户端的邮件服务器是Microsoft Exchange,位于办公室的物理盒子上。每当外界人士通过电子邮件request@website.com时,邮件就会到达。 但如果Web服务器发送到同一个电子邮件地址,则每次都会失败。这是不 PHP问题。我将shell安全地保存到Web服务器,并使用sendmail和UNIX邮件应用程序对其进行了测试。我也通过从shell发送各种电子邮件帐户来测试它。我可以给自己发电子邮件,例如,在website.com域名中没有人。
简而言之,当我登录website.com时,发送邮件至requests@website.com,user@website.com,alother_user@website.com全部失败。所有其他地址工作正常。我发现这些丢弃的电子邮件被路由到网络服务器的“catchall”帐户,它们位于收件箱中。
我在website.com上做过MX查找。 MX记录指向mailsec.website.com。我可以telnet到mailsec.website.com端口25并查看SMTP服务器。
在我看来,在发送邮件到requests@website.com时,website.com没有进行MX查找。我的理论是,它将域识别为本地域,看到没有“请求”用户帐户将其传递给,并将邮件丢弃到catchall帐户。我想要的是强制sendmail进行MX查找并将消息发送到Exchange服务器。我在这里结束了。我无法弄清楚如何做到这一点。
就此而言,我可能会离开这里,并完全误诊了这一点。互联网邮件和MX对我来说似乎总是一种黑色艺术,我的无知肯定会出现在这个问题中。
答案 0 :(得分:9)
我认为问题在于sendmail(您的进程)正在与本地sendmail守护进程通信。本地sendmail守护程序认为因为它是website.com,所以它应该知道如何传递电子邮件。不幸的是,to字段中的实际地址在Web服务器上不存在,因此它将其转储到“catchall”邮箱中。您应该与您的ISP联系并让他们更新他们的sendmail配置,以便发送到... @ website.com的邮件转发到邮件交换器,而不是在本地处理。
答案 1 :(得分:3)
默认情况下,Sendmail会猜测本地电子邮件域的列表。 可以使用sendmail.mc文件中的以下行关闭它:
define(`confDONT_PROBE_INTERFACES',`True')
作为更改前后的根列表本地电子邮件域。
echo '$=w' | sendmail -Am -bt
在禁用自动猜测后,您将看到应该“手动”将哪些域添加到(通常)/ etc / mail / local-host-names文件中。
P.S。对于sendmail问题,您可以使用news:comp.mail.sendmail
答案 2 :(得分:1)
tvanfosson基本上拥有它,但作为临时解决方法,您应该能够更改脚本以便邮件“user@mailsec.website.com”,然后邮件将被传递到实际的邮件服务器。 / p>
答案 3 :(得分:0)
编辑tsm.cf文件(在/ etc / mail /或类似文件中)以包含
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
答案 4 :(得分:0)
对我有用的是在托管网站的网络服务器上添加MX记录,该记录指向在原始域名服务器上分配的主机。在这里提供的情况下,将是一个mx记录,指向:mailsec.website.com
答案 5 :(得分: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
答案 6 :(得分:0)
遇到了同样的问题。 MX指向外部Exchange服务器,但php / sendmail没有查找此记录。取而代之的是,WordPress在此Web服务器上发布的邮件被置于catchall-mailbox中。
解决方案是删除Web服务器上的所有邮箱。现在sendmail对MX感兴趣了,所有邮件都转到了Exchange。
但是,Exchange使用Webspace的邮件服务器作为SmartHost来发送邮件。作为解决方案,我们能够使用FTP凭据访问邮件服务器。我认为该解决方案无法在这个星球上的每个提供商上使用,但在我们的案例(all-inkl.com)中,它可以解决问题。