PHP和Exchange Web服务(EWS) - 无法连接它

Sku*_*son 5 php exchangewebservices

我之前从未尝试过这个,但我正在尝试使用PHP获取有关交换帐户的数据(例如收件箱中的电子邮件数量和收件箱中未读电子邮件的数量).仅供记录,PHP服务器与Exchange服务器位于不同的域.

我的PHP服务器正在运行:
- 系统:Linux
- PHP版本5.3.3
- cURL信息7.19.7
- cURL NTLM是
- 启用Soap客户端和服务器

Excahnge正在运行:
- 版本14.1或Exchange 2010 SP1

我已经尝试了3个PHP库,它们都返回了一个非常相似的错误.用于PHP,PHP-EWSEWSWrapper库的Heartspring Exchange Web服务.

正如所有3个库都需要的那样,我从交换服务器下载了这三个文件并将它们放在PHP服务器web目录的相应位置:
- Services.wsdl(使用大写和lovercase首字母)
- messages.xsd
- types.xsd

我还添加了ExchangeServiceBindingto Services.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
Run Code Online (Sandbox Code Playgroud)

Exchange.php:52指向:

parent::__construct($wsdl, $options);
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

在那里,我尝试将服务器路径(/ var/www/...)以及web url路径(http://domain.com/...)添加到services.wsdl以及服务器位置,它不会改变任何内容exeps在上面的错误代码中的URL.

ExcahngeWebServices.php(235)指向:

public function FindFolder($request) {
        $request->getAsSOAP();
        return $this->initializeSoapClient()->{__FUNCTION__}($request);
    } // end function FindFolder()
Run Code Online (Sandbox Code Playgroud)

似乎$ request的问题可能存在,因为下一条跟踪EWSWrapper.php(529)指向:

// make the actual call
        $response = $this->ews->FindFolder($request);

        return $response;
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,因为广泛的谷歌和Stack Exchange搜索没有帮助.我认为通往types.xsd错误或错误的道路$request.

Sku*_*son 0

我将问题追溯到可能的问题Bug in PHPpossible solution对于某些不受该错误影响的用户:

\n\n
    \n
  1. Bug #61463:使用 httpssoapservice 时无法导入架构

  2. \n
  3. 本地存储,services.wsdl, types.xsd and messages.xsd但将模式导入引用到services.wsdl交换服务器messages.xsd,并将messages.xsd模式导入引用到交换服务器types.xsd(而不是本地存储的模式,在我的情况下由于某种原因无法导入)。

  4. \n
\n\n

之后,至少使用 Talking SOAP With ExchangeParsing Schema: can\'t import schema from中提供的代码不再出现错误。

\n\n

schema import errorI\xc2\xb4m 实际上仍然在原始帖子中的发布服务器上获取。但不在另一台运行 PHP 5.2.7 的测试服务器上。我\xc2\xb4m猜测PHP BUG不会影响该测试服务器。

\n