2011-11-30 30 views
2

這已經連續3天嘲笑我了。我安裝了pear,腳本很好,因爲我在許多其他項目中使用過它。我的問題是,我會得到什麼原因梨形郵件 - 無法連接

Failed to connect to mail.domain.co.uk:25 [SMTP: Failed to connect socket: Connection timed out (code: -1, response:)] 

我試過幾個不同的賬戶和我使用的代碼是從計算器其中有50多票所以必須努力Gmail帳戶!有沒有可能存在的服務器限制?我的代碼如下。

<?php 
require_once "/usr/local/lib/php/Mail.php"; 

$from = "<[email protected]>"; 
$to = "<[email protected]>"; 
$subject = "Hi!"; 
$body = "Hi,\n\nHow are you?"; 

$host = "mail.domain.co.uk"; 
$username = "notifications.domain.co.uk"; 
$password = "fu*****"; 

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); 
$smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password)); 
$mail = $smtp->send($to, $headers, $body); 
if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
} else { 
    echo("<p>Message successfully sent!</p>"); 
} 
?> 

任何幫助將是非常greatfull

+0

您可以telnet到該主機的獨立於PHP的端口25嗎?如果你甚至無法telnet,那麼有些東西會阻止你的連接嘗試(防火牆?),而不是它是PHP代碼中的一個錯誤。 –

回答

3

我覺得它無關PEARMail。嘗試從執行PHP的機器執行telnet mail.domain.co.uk 25。如果你也有超時,那不是PEARMail,而是網絡。它可以是許多原因:防火牆,路由,一些鏈接等。

基本上發送郵件失敗的階段是建立到端口25上的郵件服務器的TCP連接。首先調試,當你可以建立一個telnet連接 - 我相當肯定你的PHP也能工作。

---編輯---

還有一件事出現在我的腦海裏。如果您有任何機會在本地家庭服務器上運行該服務,並連接到您的標準家庭DSL運營商,則它們中的很多會阻止傳出端口25.在這種情況下,他們利用所謂的smarthost,基本上是其中的SMTP中繼自己的處所,它會接受你的任何郵件到任何地址。在ISP的網頁上查找它,它們必須讓它知道,然後使用它而不是mail.domain.co.uk。

--- edit2 ---

那我們就排除PEARMail吧。

請嘗試以下短小的代碼作爲一個單獨的腳本:

<?php 
$fp = fsockopen("mail.domain.co.uk", 25, $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    echo "I'm connected!<br />\n"; 
    fclose($fp); 
} 
?> 

這應該排除PEARMail因爲這是一個下拉死亡簡單窮人的telnet更換。

+0

這不是我的託管,我代表一家小公司使用另一家公司使用cpanel等,但不認爲我有命令行訪問。非常感謝,將進一步探討 –

+0

@PhilJackson:我用一個簡單的連接測試儀編輯了我的文章。如果這也讓你暫停,那麼你現在至少可以排除PEARMail。 – favoretti

+0

警告:fsockopen()[function.fsockopen]:無法連接到/home/usr/public_html/path/file.php上的mail.domain.co.uk:25(連接超時)行號 連接超時(110) –