4

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

我正在为客户开发一个新网站。该网站位于(这是一个示例)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 对我来说一直是一门魔法,而我的无知肯定会在这个问题上表现出来。

4

7 回答 7

9

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

于 2008-11-27T02:28:22.017 回答
4

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

define(`confDONT_PROBE_INTERFACES',`True')

作为根列表本地电子邮件域在更改之前和之后使用:

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

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

更改后sendmail.mc

  1. 生成/编译新sendmail.cf文件
  2. 重启 sendmail 守护进程(或发送 HUP 信号)
于 2013-03-06T12:13:54.170 回答
1

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

于 2008-11-27T03:44:51.953 回答
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
于 2009-04-01T13:41:59.157 回答
0

对我有用的是在托管网站的网络服务器上添加一条 MX 记录,该记录指向原始域名服务器上分配的主机。在此处介绍的情况下,mx 记录指向:mailsec.website.com

于 2011-01-01T22:49:46.583 回答
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
于 2015-05-30T19:29:36.727 回答
0

陷入同样的​​问题。MX 指向外部 Exchange 服务器,但 php/sendmail 没有查找此记录。相反,由 WordPress 在此网络服务器上发布的邮件会落入万能邮箱。

解决方案是删除网络服务器上的所有邮箱。现在 sendmail 对 MX 感兴趣,所有邮件都发送到了 Exchange。

但是,Exchange 使用网络空间的邮件服务器作为外发邮件的 SmartHost。作为解决方案,我们能够使用 FTP 凭据来访问邮件服务器。我认为这个解决方案不适用于这个星球上的每个供应商,但在我们的案例 (all-inkl.com) 中它成功了。

于 2018-10-01T07:49:51.673 回答