我以前从未尝试过,但我正在尝试使用 PHP 获取有关交换帐户的数据(例如收件箱中的电子邮件数量和收件箱中未读电子邮件的数量)。仅作记录,PHP 服务器与交换服务器位于不同的域中。
我的 PHP 服务器正在运行:
- 系统:Linux
- PHP 版本 5.3.3
- cURL 信息 7.19.7
- cURL NTLM 是
- 启用了 Soap 客户端和服务器
Excahnge 正在运行:
- 版本 14.1 或 Exchange 2010 SP1
我尝试了 3 个 PHP 库,它们都返回非常相似的错误。适用于 PHP 、PHP-EWS和EWSWrapper库的Heartspring Exchange Web 服务。
由于所有 3 个库都需要,我从交换服务器下载了三个文件并将它们放在 PHP 服务器 Web 目录上的适当位置:
- Services.wsdl(使用大写和 lovercase 首字母)
-messages.xsd
-types.xsd
我还添加了ExchangeServiceBinding
toServices.wsdl
并将其指向soap:address location
交换服务器Exchange.asmx
(我测试了链接,它是正确的)。
我收到所有 3 个库的非常相似的错误消息,这是来自 EWSWrapper 的完整错误:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR:
Parsing Schema: can't import schema from
'/var/www/vhosts/domain.com/EWSWrapper/wsdl/types.xsd'in
/var/www/vhosts/domain.com/EWSWrapper/NTLMSoapClient/Exchange.php:52
Stack trace: #0
/var/www/vhosts/domain.com/EWSWrapper/NTLMSoapClient/Exchange.php(52):
SoapClient->SoapClient('/var/www/vhosts...', Array)
#1
/var/www/vhosts/domain.com/EWSWrapper/ExchangeWebServices.php(483):
NTLMSoapClient_Exchange->__construct('/var/www/vhosts...', Array)
#2
/var/www/vhosts/domain.com/EWSWrapper/ExchangeWebServices.php(235):
ExchangeWebServices->initializeSoapClient()
#3
/var/www/vhosts/domain.com/EWSWrapper/EWSWrapper.php(529):
ExchangeWebServices->FindFolder(Object(EWSType_FindFolderType))
#4
/var/www/vhosts/domain.com/EWSWrapper/test in
/var/www/vhosts/domain.com/EWSWrapper/NTLMSoapClient/Exchange.php on line 52
Exchange.php:52 指向:
parent::__construct($wsdl, $options);
ExchangeWebServices.php(483) 指向:
protected function initializeSoapClient() {
return new NTLMSoapClient_Exchange(
dirname(__FILE__).'/wsdl/services.wsdl',
array(
'user' => $this->username,
'password' => $this->password,
'location' => 'https://'.$this->server.'/EWS/Exchange.asmx',
)); // end return
} // end function initializeSoapClient()
在那里,我尝试将服务器路径 (/var/www/...) 和 web url 路径 (http://domain.com/...) 设置为 services.wsdl 以及服务器位置,但没有任何改变除了上面错误代码中的网址。
ExcahngeWebServices.php(235) 指向:
public function FindFolder($request) {
$request->getAsSOAP();
return $this->initializeSoapClient()->{__FUNCTION__}($request);
} // end function FindFolder()
似乎 $request 可能存在问题,因为下一个跟踪EWSWrapper.php(529)指向:
// make the actual call
$response = $this->ews->FindFolder($request);
return $response;
任何帮助将不胜感激,因为广泛的 Google 和 Stack Exchange 搜索没有帮助。我会认为通往 的路径types.xsd
是错误的或$request
.