2008-09-02 40 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服務器屬性屏幕的訪問標籤中找到。 當然,如果服務器對互聯網開放,那麼我們必須對這些中繼限制更加敏感,但在我的情況下,這是在開發盒上的虛擬服務器上。

希望有所幫助。