这是一个我确信很容易解决的问题,但我整天都在努力解决这个问题。
我正在为客户开发一个新网站。该网站位于(这是一个示例)website.com。我有一个 PHP 表单脚本,可以将访问者的请求通过电子邮件发送到 requests@website.com。
当我在不同域的登台服务器上编码时,一切正常。当我将其移至 website.com 时,邮件消息从未到达。Web 服务器位于具有主要 ISP 的虚拟主机上。
以下是我从那以后学到的东西: 我客户的邮件服务器是 Microsoft Exchange,实际位于他们办公室的一个盒子上。每当外界有人向 requests@website.com 发送电子邮件时,邮件就会到达。 但是如果网络服务器发送到同一个电子邮件地址,它每次都会失败。这不是PHP 问题。我将 shell 保护到 Web 服务器,并使用 sendmail 和 UNIX 邮件应用程序对此进行了测试。我还通过从 shell 发送各种电子邮件帐户来测试它。例如,我可以给自己发电子邮件,只是 website.com 域中的任何人都没有。
简而言之,当我登录到 website.com 时,发送到 requests@website.com、user@website.com、another_user@website.com 的邮件都失败了。所有其他地址都可以正常工作。我发现那些丢弃的电子邮件被路由到 Web 服务器的“catchall”帐户,它们位于收件箱中。
我在 website.com 上进行了 MX 查找。MX 记录指向 mailsec.website.com。我可以远程登录到 mailsec.website.com 的 25 端口并查看 SMTP 服务器。
在我看来,website.com 在向 requests@website.com 发送邮件时没有进行 MX 查找。我的理论是,它将域识别为本地域,看到没有“请求”用户帐户可以将其传递到,然后将邮件放入包罗万象的帐户中。我想要的是强制 sendmail 进行 MX 查找并将邮件发送到 Exchange 服务器。我在这里束手无策。我不知道该怎么做。
就此而言,我可能离这里很远,并且完全误诊了这一点。互联网邮件和 MX 对我来说一直是一门魔法,而我的无知肯定会在这个问题上表现出来。