Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 邮件服务器不在web主机上时的sendmail和MX记录_Email_Smtp_Sendmail_Mx Record - Fatal编程技术网

Email 邮件服务器不在web主机上时的sendmail和MX记录

Email 邮件服务器不在web主机上时的sendmail和MX记录,email,smtp,sendmail,mx-record,Email,Smtp,Sendmail,Mx Record,这是一个我确信很容易解决的问题,但我一整天都在忙这个 我正在为一个客户开发一个新的网站。该网站位于(这是一个示例)website.com。我有一个PHP表单脚本,可以通过电子邮件将访问者的请求发送到requests@website.com. 当我在另一个域上的暂存服务器上编写此代码时,一切都正常。当我把它移动到website.com时,邮件消息从未到达。web服务器位于虚拟主机上,主机上有一个主要ISP 从那以后,我学到了以下几点:我客户的邮件服务器是Microsoft Exchange,位于他

这是一个我确信很容易解决的问题,但我一整天都在忙这个

我正在为一个客户开发一个新的网站。该网站位于(这是一个示例)website.com。我有一个PHP表单脚本,可以通过电子邮件将访问者的请求发送到requests@website.com.

当我在另一个域上的暂存服务器上编写此代码时,一切都正常。当我把它移动到website.com时,邮件消息从未到达。web服务器位于虚拟主机上,主机上有一个主要ISP

从那以后,我学到了以下几点:我客户的邮件服务器是Microsoft Exchange,位于他们办公室的一个盒子上。当外界有人发电子邮件时requests@website.com,邮件到了。但如果web服务器发送到相同的电子邮件地址,则每次都会失败。这不是PHP的问题。我将shell保护到web服务器,并已使用sendmail和UNIX邮件应用程序对此进行了测试。我还通过从shell发送各种电子邮件帐户对其进行了测试。我可以给自己发电子邮件,例如,在website.com域中没有人

简而言之,当我登录到website.com时,将邮件发送到requests@website.com, user@website.com,另一个_user@website.com都失败了。所有其他地址都可以正常工作。我发现,这些被丢弃的电子邮件被路由到网络服务器的“catchall”帐户,它们位于其收件箱中

我在website.com上做了MX查询。MX记录指向mailsec.website.com。我可以通过telnet连接到mailsec.website.com端口25并查看SMTP服务器

在我看来,website.com在向用户发送邮件时并没有进行MX查找requests@website.com. 我的理论是,它将域识别为本地域,发现没有“请求”用户帐户将其发送到,并将邮件放入catchall帐户。我想要的是强制sendmail执行MX查找并将邮件发送到Exchange服务器。我在这里束手无策。我不知道该怎么做


就这一点而言,我可能在这里偏离了底线,完全误诊了这一点。互联网邮件和MX对我来说一直都是一门黑色艺术,我的无知显然在这个问题上有所体现。

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

tvanfosson基本上有此功能,但作为一种临时解决方法,您应该能够更改您的脚本,使其能够发送邮件user@mailsec.website.com',然后邮件将被传送到实际的邮件服务器。

编辑tsm.cf文件(在/etc/mail/或类似文件中)以包括

FEATURE(relay_entire_domain) 
在DOMAIN()和MAILER()行之间。由于您正在编辑该文件,您可能还希望使用

define(`confPRIVACY_FLAGS',``noexpn,novrfy'')
更改tsm.cf文件(或任何sendmail配置文件)后,重新启动或启动sendmail进程

此更改是必要的,因为域的WWW和MX服务器不存在于同一进程空间中;此功能触发sendmail使用其外部传递机制处理域的邮件

tsm.cf文件的编辑部分应类似于以下内容:

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

对我来说,有效的方法是在承载网站的Web服务器上添加一条MX记录,该记录指向在原始域名服务器上分配的主机。在这里展示的例子中,mx记录指向:mailsec.website.com

Sendmail默认猜测本地电子邮件域列表。 可以使用sendmail.mc文件中的以下行将其关闭:

define(`confDONT_PROBE_INTERFACES',`True')
以根用户身份列出更改前后的本地电子邮件域,使用:

echo '$=w' | sendmail -Am -bt
在禁用自动猜测后,您将看到哪些域应该“手动”添加到(通常)/etc/mail/local主机名文件中

更改
sendmail.mc
后:

  • 生成/编译新的
    sendmail.cf
    文件
  • 重新启动sendmail守护程序(或发送HUP信号)

  • 我是新来的。想要扩展RB_CWI的回答,但不允许我发表评论。 他的解决方案很有效

    您不需要定义域()

    然而,在我的系统上,我被要求安装sendmail cf软件包

    以下说明是在CentOS 6.5上完成的

    首先,安装sendmailcf

    sudo yum install sendmail-cf
    
    然后,编辑senmail.mc

    sudo vi /etc/mail/sendmail.mc
    
    在文件的底部添加功能(中继整个域)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
    

    我被困在同一个问题上。MX指向外部Exchange服务器,但php/sendmail未查找此记录。相反,WordPress在此Web服务器上发布的邮件会被丢弃在catchall邮箱中

    解决方案是删除Web服务器上的所有邮箱。现在sendmail对MX感兴趣,所有邮件都被送到了交易所

    但是,Exchange使用Web空间的邮件服务器作为发送邮件的SmartHost。作为解决方案,我们能够使用FTP凭据访问邮件服务器。我假设这个解决方案并不适用于这个星球上的每个提供商,但在我们的案例中(所有inkl.com),它已经成功了。

    请看下面的讨论。Pawel的回应是为了我。