我使用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行的未知中
提前感谢您的帮助!
答案 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不再报告错误。