2017-06-19 142 views
3

我正在使用Codeigniter 3,並在我的網站上有一個簡單的聯繫表單。這個聯繫表單在我的localhost XAMPP環境中完美工作,但不在我的共享網絡託管(BT)上。Codeigniter SMTP無法連接

我無法解決問題是什麼,我一直在與他們的支持聯繫,顯然如果電子郵件帳戶能夠通過電子郵件客戶端發送和接收電子郵件(它可以),他們不提供任何額外的支持:/

我能夠登錄到Office365使用此帳戶發送和接收電子郵件。 Office365中的smpt設置是;

Server name: smtp.office365.com 
Port: 587 
Encryption method: STARTTLS 

我現在的代碼如下;

$config['protocol']  = 'smtp'; 
    $config['smtp_host'] = 'smtp.office365.com'; // also tried tls://smtp.office365.com 
    $config['smtp_port'] = '587'; 
    $config['smtp_user'] = '[email protected]'; 
    $config['smtp_pass'] = 'MyPass'; 
    $config['smtp_crypto'] = 'tls'; 
    $config['mailtype']  = 'html'; 
    $config['wordwrap']  = TRUE; 
    $config['charset'] = 'iso-8859-1'; 
    $config['newline'] = "\r\n"; 

在localhost郵件發送,沒有問題。在現場Web主機上,我收到以下錯誤;

消息:的fsockopen():無法連接到smtp.office365.com:587 (連接超時)

我讀過這個問題可能與未啓用的OpenSSL ,但網絡主機已確認它已啓用。我也使用下面的代碼檢查了加載的擴展;

echo "<pre>"; 
    print_r(get_loaded_extensions()); 
    echo "</pre>"; 

返回;

Array 
(
    [0] => Core 
    [1] => date 
    [2] => ereg 
    [3] => libxml 
    [4] => openssl 
    [5] => pcre 
    etc 
    etc 
) 

我檢查過我能夠使用下面的代碼連接到smtp服務器;

$fp = fsockopen('tcp://smtp.office365.com', 587, $errno, $errstr, 10); 
echo fgets($fp, 128); 
var_dump($fp, $errno, $errstr); 
fclose($fp); 

在我的本地主機上,我收到以下消息;

220 VI1PR0602CA0001.outlook.office365.com微軟ESMTP郵件服務 準備在星期一,2017年6月19日10時19分10秒0000資源(55)的類型(流) INT(O)的字符串(0 )「」

在實時服務器上,我收到了這個;

消息:的fsockopen():無法連接到TCP ://smtp.office365.com:587(連接超時)

我曾嘗試Gmail的SMTP,這同樣適用,但在本地不在遠程Web主機上。

還有什麼我應該嘗試,或要求我的網絡主機檢查?目前我沒有想法。

任何幫助表示讚賞。

回答

5

我不知道這是否會在你的情況下工作,但我有同樣的問題。它使用宅基地在我的本地發展上工作,但在東道國它的錯誤。我做了什麼來解決它,是我改變協議的價值郵件。

試圖改變你的代碼:

$config['protocol']  = 'smtp'; 

這樣:

$config['protocol']  = 'mail'; 
+0

驚人@winnie damayo - 那工作!非常感謝你。爲什麼這個工作和我的原始方法沒有?根據Codeigniter docs的說法,它使用'$ config ['protocol'] ='smtp''我一直試圖解決這個問題的日子,再次感謝:)如果你可以詳細說明答案是好的! –