2

我遇到了这个问题:

PHP Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for chris.mahan@gmail.com in c:\inetpub\wwwroot\mailtest.php on line 12 

从这个脚本:

<?php
$to = "chris.mahan@gmail.com";
$subject = "test";
$body = "this is a test";

if (mail($to, $subject, $body)){
    echo "mail sent";
}
else {
    echo "problem";
}
?>

服务器上 php.ini 的部分:

[mail function]
; For Win32 only.
SMTP = server.domain.com; for Win32 only
smtp_port = 25

; For Win32 only.
sendmail_from = support@domain.com
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

(注意“服务器”和“域”准确指实际的服务器和域名)

在 IIS 中,SMTP 正在运行。在"Access"选项卡,"Relay"按钮下,选择哪些计算机可以通过此虚拟服务器进行中继设置为checkbox "only the list below"并且在列表上是"127.0.0.1(xxx.xxx.xxx.xxx)" (x's representing actual server IP address).

服务器正在运行Windows Server 2003 Service Pack 2,截至 2008 年 9 月 1 日下午 5 点已完全修补。我假设它正在运行IIS7(如何检查?)。

有任何想法吗?

作为对Espo的回应:这台机器托管在数据中心。我们不想使用 gmail 帐户(正在这样做,想摆脱那个)。Windows server 2003 带有自己的 SMTP 服务器。

更新:根据 Yaakov Ellis 的建议,我放弃了所有中继限制并将服务器 IP 添加到允许列表中(使用提供的反向 DNS 按钮)并且事情开始工作了。

感谢 Espo 和 Yaakov 帮助我。

4

5 回答 5

4

尝试删除 SMTP 服务器中中继的 IP 限制,并将其开放给所有中继。如果它在设置时有效,那么您就知道问题与原始限制有关。在这种情况下,可能是 DNS 问题,或者您列出了错误的 IP 地址。

于 2008-09-02T07:30:53.520 回答
1

您使用了错误的 SMTP 服务器。如果您只想向您的 gmail 帐户发送电子邮件,请在此处查看我的回答。

如果您还需要向其他帐户发送电子邮件,请向您的 ISP 询问您的 SMTP 详细信息。

编辑:我认为使用 ISP SMTP 服务器总是更好,因为他们(应该)让人们监视邮件队列,检查漏洞并更新邮件软件。如果您的企业正在开发 Web 应用程序,几乎总是最好坚持您的工作,并让其他人做他们的事情(例如运行邮件服务器)。

如果您仍然出于某种原因想要使用本地 SMTP 服务器,那么首先要排除 php-part。尝试关注 KB153119,然后检查 SMTPServer IISlog 是否有错误。

EDIT2:该知识库文章说它是用于交换的,但相同的命令也用于其他 SMTP 服务器(包括 IIS),所以请尝试看看您是否可以使用文章中的示例发送邮件。

于 2008-09-02T06:17:59.577 回答
0

@Espo:我会在 KB153119 中这样做。谢谢。

关于邮件服务器:我听到了。

当我发现更多时,我会更新。

于 2008-09-02T06:57:24.473 回答
0

@Espo,有问题的文章与 Exchange 服务器有关,而不是 IIS7.0 SMTP 服务器。

摘要:本文介绍了如何远程登录到运行简单邮件传输协议 (SMTP) 服务的计算机上的端口 25 以解决 SMTP 通信问题。本文中的信息(包括错误消息)仅适用于尝试解决基于 Microsoft Exchange 的服务器的 SMTP 通信问题时出现的问题,不适用于一般故障排除目的。

于 2008-09-02T07:19:46.073 回答
0

我有同样的问题,iis6, 2003 服务器上的 php 5。PHP 在尝试使用 mail() 时总是失败。通过将中继限制从 'Only the list below' (默认为空)更改为 'All except the list below' ,我设法让它接受来自 php 的邮件。中继限制可以在 smtp 服务器属性屏幕的访问选项卡中找到。当然,如果服务器对互联网开放,那么人们必须对这些中继限制更加敏感,但在我的情况下,这是在开发盒上的虚拟服务器上。

希望有帮助。

于 2009-01-10T17:59:14.370 回答