所以我对我正在编写的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);
我尝试过两个主要的$ host“版本”(有和没有SSL):
1 - {server:993 / imap / ssl / novalidate-cert} INBOX 2 - {server:143 / imap / novalidate-cert} INBOX
novalidate-cert处理证书错误。对于这两个参数,我也尝试了“notsl”参数,没有任何明显的结果。我得到的错误是这个可爱的信息,绝对不会以任何方式,形状或形式隐藏:
[CLOSED] IMAP connection broken (server response)
此外,我还收到这些通知:
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
前两个特别困惑我...我在另一台服务器上尝试过这个脚本,以确保问题与我的本地网络无关。经过大量的谷歌搜索,我只得到了这个:http://www.phpfreaks.com/forums/index.php?topic=190628.0这似乎是一个有点麻烦的修复。
有什么想法吗?
答案 0 :(得分:10)
我遇到同样的问题,看起来正在生成错误,因为Exchange服务器会通告它不支持的身份验证协议(http://vision.eng.shu.ac.uk/mmvlwiki/index.php/Exchange)。似乎这个问题与Linux服务器是隔离的,因为我对Windows机器上完全相同的代码没有任何问题。这是一个长期存在的问题,最近对PHP进行了修补(v 5.3.2),允许您禁用某些身份验证协议(http://php.net/manual/en/function.imap-open.php)。以下代码对我来说是间歇性的:
$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()));
所以我很喜欢它,它似乎确实有用......虽然它有可能对我公司的交换服务器进行无限循环/ 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()));
}
}
答案 1 :(得分:-3)
我有一个连接到OWA电子邮件服务器的PHP脚本,并使用imap_open PHP函数返回电子邮件的内容。然后使用该内容,它在MindTouch实例中创建一个页面。
所有这些代码都能正常工作,但脚本报告了上面显示的GSSAPI失败错误。在我的Web结果页面中,(正确)报告了成功,但页面也显示了GSSAPI错误消息。
我在代码中发现的是我正在开启error_reporting(E_ALL)
。当我更改报告级别时,错误消息消失了。
我知道错误仍然存在,我不知道为什么。但是,由于我的所有代码都正常工作,我只是希望错误消息消失,因为它让我的用户感到困惑。
将报告级别更改为较低的级别可以解决这个问题。