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

时间:2016-06-24 16:36:14

标签: php exchange-server imap imap-open

因此,我有一个通用/应用程序/系统帐户(术语各不相同),可以访问多个邮箱。我使用的用户名格式为<domain>/<username>/<mailbox>,这是唯一的&#34;不同寻常的&#34;事情。以下行适用于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注意:未知:无法对IMAP服务器进行身份验证:AUTHENTICATE失败。 (errflg = 2)在第0行的未知中

我尝试过:

  • 邮箱&#39;有效的原始帐户(<domain>/<user>格式的用户名)
  • /debug$mailbox标记中使用OP_DEBUG - 其中没有任何有用的内容
  • 使用python调试消息到服务器。这将验证用户名是否以三段字符串形式发送,并且还可以正常工作
  • 删除第3段(邮箱)以后我可以选择它 - 导致两种情况/版本中的身份验证失败

问题:

  1. 这是一个PHP错误吗?
  2. 还有其他办法吗? (我无法更改PHP版本)
  3. 我可以以某种方式启用邮件记录吗? (没有root所以没有tcpdump选项)

1 个答案:

答案 0 :(得分:0)

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

$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上,我几乎可以肯定这就是问题所在。