php mail()无法运行Windows 2003,IIS SMTP

时间:2008-09-02 06:15:57

标签: php iis smtp

我遇到了这个问题:

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帮助我。

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

您使用的是错误的SMTP服务器。如果您只是要向您的Gmail帐户发送电子邮件,请查看我的回答here

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

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

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

EDIT2: 该KB文章说这是用于交换,但同样的命令也用于其他SMTP服务器(包括IIS),因此请尝试使用文章中的示例发送邮件。

答案 2 :(得分:0)

@Espo:我会这样做KB153119。感谢。

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我遇到了同样的问题,iis6,2003服务器上的php 5。在尝试使用mail()时,Php总是失败。 我已经设法通过将“仅下面的列表”(默认情况下为空)中的“中继限制”更改为“除下面的列表以外的所有内容”来接收来自php的邮件。 可以在smtp服务器属性屏幕的“访问”选项卡中找到中继限制。 当然,如果服务器对互联网开放,那么就必须对这些中继限制更加明智,但在我的情况下,这是在开发盒上的虚拟服务器上。

希望有所帮助。