如何保护imap_open连接

时间:2012-01-27 14:34:11

标签: php imap

我使用imap_open()与我的邮件服务器建立连接,以检查退回的电子邮件。

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

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

我收到关于不安全身份验证的PHP通知:

  

注意:未知:安全问题:广告的不安全服务器   第0行的未知中AUTH = PLAIN(errflg = 1)

我在php.net上搜索并搜索了几个小时,但找不到解决方法如何摆脱这个。

我发现的唯一不起作用:添加/安全到服务器名称。

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

然后我得到:

  

注意:未知:无法使用此服务器进行安全身份验证   (errflg = 2)在第0行的未知中

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

这并不是一个虚假的消息,它只是意味着它是一个明文未加密的连接。 您可以这样做:

$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 :(得分:1)

我有点惊讶这是给你in Unknown on line 0,因为这通常只发生在脚本开始执行之前发生错误 - 但是,这个问题的唯一真正解决方案是隐藏PHP错误。

看起来您连接的服务器不支持安全身份验证,唯一的解决方案是要求服务器管理员支持它。或者使用其他服务器。您无法在代码中处理该特定问题,因此您只需处理错误而不是尝试修复错误(就像我讨厌向任何人推荐这种方法一样)。

您可能会发现即使调用ini_set('display_errors', 0)或使用邪恶的@运算符也无法解决此问题,因为它是in Unknown on line 0 - 尽管您不应该在生产环境无论如何。您应确保将生产中的php.ini设置为隐藏用户的错误。

答案 2 :(得分:1)

这个问题已有几年历史,但我遇到了同样的问题:

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

给我错误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不再报告错误。