2008-09-02 39 views
2

我得到这个问题:PHP的mail()不工作,Windows 2003,IIS SMTP

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

此脚本:从服务器上的php.ini

<?php 
$to = "[email protected]"; 
$subject = "test"; 
$body = "this is a test"; 

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

部分:

​​

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

在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,完全补丁下午5时9月1日2008年。我认为它是运行IIS7(如何检查?)。

任何想法?

在向效应初探Espo:本机在数据中心托管。我们不想使用Gmail帐户(正在做这件事,想要离开这个帐户)。 Windows Server 2003带有自己的SMTP服务器。

更新:每亚科夫埃利斯的建议,我放弃了所有的中继限制并增加了服务器的IP到允许列表中(使用提供反向DNS按钮),事情开始工作。

感谢Espo和Yaakov帮助我。

回答

4

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

1

您正在使用错误的SMTP服务器。如果你只是要发送电子邮件到你的Gmail帐户,看看我的答案here

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

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

如果仍然出于某种原因希望使用本地的SMTP服务器,第一件事将是排除PHP的一部分。尝试访问KB153119,然后检查SMTPServer IISlog是否有错误。

EDIT2: 该KB文章说它是用于交换,但同样的命令也用于其他SMTP服务器(包括IIS),所以请尝试看看您是否可以使用来自文章。

0

@Espo:我会这么做KB153119。谢谢。

关于邮件服务器:我听到你的声音。

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

0

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

摘要:本文介绍如何telnet到运行简单邮件传输协议(SMTP)服务的计算机上的端口25,以解决SMTP通信问题。本文中的信息(包括错误消息)仅适用于尝试解决与基于Microsoft Exchange的服务器之间的SMTP通信问题时的问题,并不适用于常规疑难解答。

0

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

希望有所帮助。