编程语言
首页 > 编程语言> > PHP imap_open适用于7.0.6但不适用于5.4.16

PHP imap_open适用于7.0.6但不适用于5.4.16

作者:互联网

所以,我有一个通用/应用程序/系统帐户(术语各不相同),可以访问多个邮箱.我使用的用户名格式为< domain> /< username> /< mailbox>这是唯一“与众不同”的事情.以下行适用于PHP 7.0.6(我的笔记本电脑),但不适用于5.4.16(开发服务器):

$mbox = imap_open("<host>:993/ssl/novalidate-cert", 
               "<domain>/<username>/<mailbox>", <pass>,
               NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));

我得到的错误是:

PHP Notice: Unknown: Can not authenticate to IMAP server: AUTHENTICATE failed. (errflg=2) in Unknown on line 0

我尝试过的:

>邮箱的原始帐户(< domain> /< user>格式的用户名)有效
>在$mailbox和OP_DEBUG标志中使用/ debug – 其中没有任何有用的东西
>使用python调试消息到服务器.这将验证用户名是否以三段字符串形式发送,并且也有效
>删除第3段(邮箱)以后我可以选择它 – 导致两种情况/版本中的身份验证失败

问题:

>这是一个PHP错误吗?
>有没有其他方法可以做到这一点? (我无法更改PHP版本)
>我能以某种方式启用消息记录吗? (没有root所以没有tcpdump选项)

解决方法:

在我看来,你可以尝试做这样的事情:

$mbox = imap_open("<host>:993/ssl/novalidate-cert", 
               "<domain>/<username>/<mailbox>", <pass>,
               NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')) or 
                   die(var_dump(imap_errors()));

您应该能够看到更多错误.接下来,您可以尝试切换到PLAIN而不是GSSAPI,并且可能尝试将n_retries设置为1并且最后想一想,添加关于IMAP的标志.

$mbox = imap_open("<host>:993/imap/ssl/novalidate-cert", 
                   "<domain>/<username>/<mailbox>", <pass>,
                   NULL,  1, array('DISABLE_AUTHENTICATOR' => 'PLAIN')) or 
                       die(var_dump(imap_errors()));

我认为Exchange存在问题,不允许它不支持的身份验证协议.如果你在win上运行它并且它的工作原理和你的开发环境在Linux上,我几乎可以肯定这就是问题所在.

标签:php,imap,exchange-server,imap-open
来源: https://codeday.me/bug/20190711/1430560.html