4

所以,我有一个通用/应用程序/系统帐户(术语不同),它可以访问多个邮箱。我使用的用户名是格式<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 通知:未知:无法对 IMAP 服务器进行身份验证:AUTHENTICATE 失败。(errflg=2) 在第 0 行的未知中

我试过的:

  • 有效的邮箱的原始帐户(<domain>/<user>格式中的用户名)
  • 使用/debugin$mailboxOP_DEBUGflag - 这些都没有做任何有用的事情
  • 使用 python 调试到服务器的消息。这将验证用户名是否作为三段字符串发送并且也有效
  • 删除第三段(邮箱)认为我可以稍后选择它 - 在两种情况/版本中都会导致身份验证失败

问题:

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

1 回答 1

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

于 2016-06-28T10:38:23.960 回答