【发布时间】:2016-10-27 08:36:46
【问题描述】:
所以,我有一个通用/应用程序/系统帐户(术语不同),它可以访问多个邮箱。我使用的用户名格式为<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>格式的用户名)有效 - 在
$mailbox和OP_DEBUG标志中使用/debug- 这些都没有任何用处 - 使用 python 调试到服务器的消息。这将验证用户名是否作为三段字符串发送并且也有效
- 删除第 3 段(邮箱)以为我可以稍后选择它 - 导致两种情况/版本的身份验证失败
问题:
- 这是一个 PHP 错误吗?
- 还有其他方法可以做到这一点吗? (我无法更改 PHP 版本)
- 我能否以某种方式启用消息记录? (没有 root 所以没有 tcpdump 选项)
【问题讨论】:
-
您好,您是尝试连接到 Gmail 还是发生在所有域中?我发现了一些关于这试图设置标志两次(php.net/manual/en/function.imap-open.php 搜索
errflg=2在此页面中,有帖子)还有一点 - 你正在发送一个关于 SSL 的标志,然后是另一个关于你不关心的标志关于证书(novalidate-cert)?您是否尝试删除/ssl?我认为这可能是你得到的问题。如果您尝试删除/ssl,请告诉我 :) -
嗨@Hrabosch。我正在连接到 MS 交换服务器(不确定版本,但我可以找到)。删除
/ssl使其挂起(无响应、无登录、无错误)。我还尝试使用端口143(没有ssl)而不是993,这会导致相同的错误消息。我会假设这不包括 SSL 问题......你知道有什么方法可以调试它并查看 IMAP 消息吗? -
所以,我将尝试我所知道的回答中描述的几点,等待它:)
-
$mbox = imap_open("{<host>:993/ssl/novalidate-cert/}<mailbox>", "<domain>/<username>", <pass>, NULL, array('DISABLE_AUTHENTICATOR' => 'GSSAPI')); -
@Wolfeh 嘿,我确实在主机部分使用
{},但是因为该帐户可以访问多个“邮箱”/帐户(不是文件夹,每个邮箱都有“收件箱”,所以我有 3 个以上的文件夹使用该名称)我必须将邮箱添加到用户名的末尾。这确实适用于 php7 和 python...
标签: php exchange-server imap imap-open