2012-01-27 130 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不再报告错误。