代码之家  ›  专栏  ›  技术社区  ›  Jim Nelson

当邮件服务器不在Web主机上时发送邮件和MX记录

  •  3
  • Jim Nelson  · 技术社区  · 17 年前

    这是个很容易解决的问题,但我一整天都在努力解决。

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

    当我在另一个域上的临时服务器上对其进行编码时,一切都正常工作。当我把它移到website.com时,邮件信息就没有到达。Web服务器位于具有主要ISP的虚拟主机上。

    这是我从那时起学到的:我的客户的邮件服务器是微软在他们办公室里的一个盒子上的Exchange。每当外界的邮件请求@website.com时,邮件就会到达。 但是 如果Web服务器发送到相同的电子邮件地址,则每次都会失败。这是 一个PHP问题。我将shell保护在Web服务器中,并用sendmail和unix邮件应用程序测试了这一点。我还通过从shell发送各种电子邮件帐户来测试它。例如,我可以给自己发电子邮件,只是在website.com域中没有人。

    简而言之,当我登录到website.com时,给requests@website.com、user@website.com和另一个user@website.com的邮件都会失败。其他地址都可以。我发现那些被丢弃的电子邮件被路由到Web服务器的“catchall”帐户,它们就在该帐户的收件箱中。

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

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

    关于这件事,我可能在这里有点离谱,完全误诊了。互联网邮件和MX对我来说一直都是一门黑色艺术,我的无知在这个问题上肯定会显现出来。

    7 回复  |  直到 7 年前
        1
  •  9
  •   tvanfosson    17 年前

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

        2
  •  3
  •   AnFi onet.eu    13 年前

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

    define(`confDONT_PROBE_INTERFACES',`True')
    

    作为根目录列出更改前后的本地电子邮件域。

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

    在禁用自动猜测之后,您将看到哪些域应该“手动”添加到(通常是)/etc/mail/local主机名文件中。

    另外,对于sendmail问题,您可以使用新闻:comp.mail.sendmail

        3
  •  1
  •   genehack    17 年前

    Tvanfosson基本上拥有它,但是作为一个临时的解决方案,您应该能够更改脚本,以便它发送邮件“user@mailsec.website.com”,然后邮件将被发送到实际的邮件服务器。

        4
  •  0
  •   RB_CWI    17 年前

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

    FEATURE(relay_entire_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
    
        5
  •  0
  •   Andro Selva Anand Wadhwani    13 年前

    对我来说,有效的方法是在承载该网站的Web服务器上添加一个MX记录,该记录指向原始域名服务器上分配的主机。在这里介绍的情况下,MX记录指向:mailsec.website.com

        6
  •  0
  •   Glauco Cattalini Lins    11 年前

    我是新来的。想要扩展 RBY-CWI 回答,但我不允许发表评论。 他的解决方案效果很好。

    你是 需要定义域()。

    但是,在我的系统上,我需要安装sendmail CF包。

    下面的说明是在 CITOS 6.5

    首先,安装sendmail cf

    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
    
        7
  •  0
  •   Michael    7 年前

    在同一个问题上被卡住了。MX指向外部Exchange服务器,但php/sendmail未查找此记录。相反,wordpress在这个web服务器上发布的邮件会被放到catchall邮箱中。

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

    但是,Exchange使用Webspace的邮件服务器作为发送邮件的智能主机。作为解决方案,我们可以使用ftp凭据访问邮件服务器。我认为这个解决方案不适用于这个星球上的每个供应商,但在我们的例子中(所有的inkl.com),它是可行的。

    推荐文章