2012-01-27 87 views
2

我使用imap_open()與我的郵件服務器建立連接以檢查退回的電子郵件。如何保護imap_open連接

$pop3conn = imap_open('{localhost:110/pop3}', MAILLOGIN, MAILPWD); 

if($pop3conn == false) 
echo'<br />no conn'; 
else 
{ 
    // check mail headers and bodies 
} 

我得到不安全的身份驗證的PHP說明:

說明:未知:安全評價研究:不安全服務器在未知通告 AUTH = PLAIN(ERRFLG = 1)在線0

我已經在php.net上搜索和谷歌搜索了幾個小時,但無法找到解決方案如何擺脫這一點。

我發現的唯一事情也沒有工作:添加/安全到servername。

$pop3conn = imap_open('{localhost:110/pop3/secure}', MAILLOGIN, MAILPWD); 

然後我得到:

通知:未知:行不能做安全的認證與此服務器 (ERRFLG = 2)未知事先0

謝謝任何幫助!

+0

auth = plain不安全意味着它是一個純文本未加密的連接,以明文方式發送用戶名/密碼。如果您不擔心在運輸途中被嗅到,您可以忽略警告。否則,你將不得不切換到pop3s,這是pop3-over-ssl。但爲了達到這個目的,服務器已經啓用了pop3s。 – 2012-01-27 14:38:39

+0

@marc B,我不能將您的評論設置爲已接受的答案,因爲您已將答案作爲評論? – Terradon 2012-01-27 21:08:59

回答

1

我有點驚訝這是給你in Unknown on line 0,因爲這通常只發生在腳本開始執行之前發生錯誤 - 但是,唯一真正的解決方案是隱藏PHP錯誤。

它看起來好像您連接到的服務器不支持安全身份驗證,唯一的解決方案是要求服務器管理員支持它。或者使用不同的服務器。在你的代碼中沒有任何東西可以解決這個特定的問題,所以你只需要處理錯誤,而不是試圖解決它(很討厭爲任何事情推薦這種方法給任何人)。

您可能會發現,甚至稱ini_set('display_errors', 0)或使用邪惡@運營商也不會解決這個問題,因爲它是in Unknown on line 0 - 雖然你不應該出在生產環境反正PHP錯誤。您應該確保生產中的php.ini設置爲隱藏用戶的錯誤。

+0

或簡單地使用'@imap_open('{localhost:110/pop3}',MAILLOGIN,MAILPWD);'我不喜歡錯誤一般不顯示 – DanFromGermany 2013-08-20 10:37:14

1

這不是一個真正的假消息,它只是意味着它是一個明文未加密的連接。 這裏是你如何能做到:

$error = imap_errors(); 
if (count($error) > 1 || $error[0] != 'SECURITY PROBLEM: insecure server advertised AUTH=PLAIN') { 
    // More than 1 error or not the expected error 
    var_dump($error); 
    throw new Exception('IMAP error detected'); 
} 
1

的問題是,一年幾十歲,但我碰到一個同樣的問題:

imap_open("{imap.domain.com:143}INBOX", 'username', 'password'); 

gaves我錯誤SECURITY PROBLEM: insecure server advertised AUTH=PLAIN

所以,它說我發送的憑據是不安全的。我所要做的就是去我的郵件提供商找出任何其他方式來安全連接。

標準端口是:

Protocol  Unsecured  Secured 
POP3   110   995 (SSL, TLS) 
IMAP4   143   993 (SSL, TLS) 
SMTP   25    465 (SSL), 587 (TLS, STARTTLS) 

而且根據PHP函數imap_open()的文檔我已經修改的參數如下:

imap_open("{imap.domain.com:993/imap/ssl}INBOX", 'username', 'password'); 

所以現在我已加密/通信固定和PHP不再報告錯誤。