Afr*_*mon 6 php imap exchange-server
所以我对我正在编写的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);
Run Code Online (Sandbox Code Playgroud)
我尝试过两个主要的$ 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)
Run Code Online (Sandbox Code Playgroud)
另外,我还收到这些通知:
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
Run Code Online (Sandbox Code Playgroud)
前两个特别困惑我......我确实在另一台服务器上尝试了这个脚本,以确保问题与我的本地网络无关.经过大量的谷歌搜索,我只得到了这个:http://www.phpfreaks.com/forums/index.php?topic = 190628.0,这似乎是一个有点麻烦的修复.
有任何想法吗?
Dav*_*ley 12
我遇到同样的问题,看起来正在生成错误,因为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()));
Run Code Online (Sandbox Code Playgroud)
这也是间歇性的:
$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()));
Run Code Online (Sandbox Code Playgroud)
所以,我这样做了,它似乎确实有效......尽管它有可能对我公司的交换服务器进行无限循环/ DOS攻击但是/关心
希望有更好的解决方案,但这应该有所帮助:
$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()));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26694 次 |
| 最近记录: |