PHP IMAP交换问题

PHP IMAP交换问题,php,exchange-server,imap,Php,Exchange Server,Imap,因此,我对目前正在编写的PHP脚本有一个小问题。首先,让我假设脚本应该连接到IMAP邮箱,搜索一些电子邮件并下载它们的附件。所有这些都已经编码好了,并且正在使用我自己的gmail帐户。当我尝试连接到exchange服务器时会出现问题。简短代码摘录: $mbox = imap_open($host, $login, $password); echo '<br/>' . imap_last_error() . '<br/>'; $emails = imap_search($m

因此,我对目前正在编写的PHP脚本有一个小问题。首先,让我假设脚本应该连接到IMAP邮箱,搜索一些电子邮件并下载它们的附件。所有这些都已经编码好了,并且正在使用我自己的gmail帐户。当我尝试连接到exchange服务器时会出现问题。简短代码摘录:

$mbox = imap_open($host, $login, $password);
echo '<br/>' . imap_last_error() . '<br/>';
$emails = imap_search($mbox, 'FROM "patate@patate.com"', SE_UID);
此外,我还收到以下通知:

Notice: Unknown: Unknown GSSAPI failure: An invalid name was supplied (errflg=1) in Unknown on line 0 
Notice: Unknown: GSSAPI mechanism status: Hostname cannot be canonicalized (errflg=1) in Unknown on line 0 
Notice: Unknown: Retrying PLAIN authentication after AUTHENTICATE failed. (errflg=1) in Unknown on line 0 
Notice: Unknown: Retrying PLAIN authentication after AUTHENTICATE failed. (errflg=1) in Unknown on line 0 
Notice: Unknown: Can not authenticate to IMAP server: AUTHENTICATE failed. (errflg=2) in Unknown on line 0 
Notice: Unknown: [CLOSED] IMAP connection broken (server response) (errflg=1) in Unknown on line 0
前两个特别让我困惑。。。我确实在另一台服务器上尝试了这个脚本,以确保问题与我的本地网络无关。在谷歌搜索了很多遍之后,我只得到了这个:这似乎是一个有点麻烦的补丁


有什么想法吗?

我也遇到了同样的问题,似乎是因为Exchange服务器播发了它不支持的身份验证协议而产生了错误()。这个问题似乎与linux服务器无关,因为我在Windows机器上使用完全相同的代码时没有任何问题。这是一个长期存在的问题,PHP最近进行了修补(V5.3.2),允许您禁用某些身份验证协议()。以下代码间歇性地对我起作用:

$this->inbox = imap_open("{server:993/imap/ssl/novalidate-cert}$inbox", 
                           $username, $password, NULL, 1, 
                           array('DISABLE_AUTHENTICATOR' => 'PLAIN')) or 
                   die(var_dump(imap_errors()));
这也会间歇性地起作用:

$this->inbox = imap_open("{server:993/imap/ssl/novalidate-cert}$inbox", 
                           $username, $password, NULL, 1, 
                           array('DISABLE_AUTHENTICATOR' => 'GSSAPI')) or 
                   die(var_dump(imap_errors()));
所以我在犹太人区操纵了它,它看起来确实有效……尽管它有可能对我公司的exchange服务器进行无休止的循环/DOS攻击,但是/care

希望有更好的解决方案,但这应该有帮助:

$tryCnt = 0;

while(!is_resource($this->inbox)){

    $this->inbox = imap_open("{server.com:993/imap/ssl/novalidate-cert}$inbox", 
                               $username, $password, NULL, 1, 
                               array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));
    $tryCnt ++;

    if(!is_resource($this->inbox)){

        $this->inbox = imap_open("{server.com:993/imap/ssl/novalidate-cert}$inbox", 
                                   $username, $password, NULL, 1, 
                                   array('DISABLE_AUTHENTICATOR' => 'PLAIN'));
        $tryCnt ++;

    }

    if($tryCnt > 20){

        echo "Cannot Connect To Exchange Server:<BR>";
        die(var_dump(imap_errors()));

    }    
}
$tryCnt=0;
而(!is_资源($this->inbox)){
$this->inbox=imap_open(“{server.com:993/imap/ssl/novalidate cert}$inbox”,
$username,$password,NULL,1,
数组('DISABLE_AUTHENTICATOR'=>'GSSAPI');
$tryCnt++;
如果(!是_资源($this->inbox)){
$this->inbox=imap_open(“{server.com:993/imap/ssl/novalidate cert}$inbox”,
$username,$password,NULL,1,
数组('DISABLE_AUTHENTICATOR'=>'PLAIN');
$tryCnt++;
}
如果($tryCnt>20){
echo“无法连接到Exchange服务器:
”; 模具(变量转储(imap\U错误()); } }
我有一个PHP脚本,可以连接到OWA电子邮件服务器,并使用imap_open PHP函数返回电子邮件内容。使用该内容,然后在MindTouch实例中创建一个页面

所有这些代码都正常工作,但脚本报告了上面显示的GSSAPI故障错误。在我的web结果页面中,报告了成功(正确),但该页面也显示了GSSAPI错误消息

我在代码中发现,我正在打开
错误报告(E\u ALL)
。当我更改报告级别时,错误消息消失了

我知道错误仍然存在,我不知道为什么。但是,由于我所有的代码都正常工作,我只想让错误消息消失,因为它让我的用户感到困惑

将报告级别更改为较低的级别解决了这一问题。

经过数小时的调试,我终于找到了无法连接到服务器的原因,添加了数组(“禁用验证器”=>“普通”)。
$tryCnt = 0;

while(!is_resource($this->inbox)){

    $this->inbox = imap_open("{server.com:993/imap/ssl/novalidate-cert}$inbox", 
                               $username, $password, NULL, 1, 
                               array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));
    $tryCnt ++;

    if(!is_resource($this->inbox)){

        $this->inbox = imap_open("{server.com:993/imap/ssl/novalidate-cert}$inbox", 
                                   $username, $password, NULL, 1, 
                                   array('DISABLE_AUTHENTICATOR' => 'PLAIN'));
        $tryCnt ++;

    }

    if($tryCnt > 20){

        echo "Cannot Connect To Exchange Server:<BR>";
        die(var_dump(imap_errors()));

    }    
}