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

标签 php exchangewebservices

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

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

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

我已经尝试了 3 个 PHP 库,它们都返回了非常相似的错误。 Heartspring Exchange Web Services for PHP , PHP-EWSEWSWrapper图书馆。

由于所有 3 个库都需要,我从交换服务器下载了这三个文件并将它们放在 PHP 服务器 Web 目录的适当位置:
- Services.wsdl(同时使用大写和情人首字母)
- 消息.xsd
- 类型.xsd

我还将 ExchangeServiceBinding 添加到 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

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 以及服务器位置,除了上面错误代码中的 url 之外,没有任何改变。

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 有问题。

最佳答案

此示例使用 PHP 内部类 SoapClient 来显示 Microsoft Exchange 2010 日历项的主题。要使其正常工作,您必须下载并修改发问者提到的“services.wsdl”、“types.xsd”、“messages.xsd”。这些文件应位于与 php 文件相同的文件夹中。

<?php

ini_set('display_errors', '1'); // for debugging
$server = "192.168.0.23";
$wsdl = "file:///" . dirname(__FILE__) . "/services.wsdl";

// valid login credentials
$options = array (
    'login' => 'test@test.net',
    'password' => 'secret'
);

$client = new SoapClient($wsdl, $options);
printf("Connected to %s%s", $server, PHP_EOL);

$FindItem->Traversal = "Shallow";
$FindItem->ItemShape->BaseShape = "AllProperties";
$FindItem->ParentFolderIds->DistinguishedFolderId->Id = "calendar";
$FindItem->CalendarView->StartDate = "2012-08-01T00:00:00Z";
$FindItem->CalendarView->EndDate = "2012-08-31T00:00:00Z";
$result = $client->FindItem($FindItem);
$calendaritems = $result
  ->ResponseMessages
  ->FindItemResponseMessage
  ->RootFolder
  ->Items
  ->CalendarItem;

foreach($calendaritems as $item) { 
    printf("%s%s", $item["Subject"], PHP_EOL);
}

您将在此 tutorial 中找到有关将 EWS 与 PHP 结合使用的重要信息

关于PHP 和 Exchange Web 服务 (EWS) - 无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936998/

相关文章:

php - Markdown 正则表达式中的原子组

php - 将大 xls 文件导入 mysql 数据库

c# - 从收件箱中的文件夹获取邮件 - EWS

python - exchangelib - 自动发现协议(protocol)中的所有步骤均失败

javascript - 从文本字段回显文本

php - 在文本文件中获取用户的值 - PHP

php - 正确的 MYSQL 查询

c# - 如何在没有邮箱的情况下使用具有 Windows 身份验证和身份的 EWS 发送和保存电子邮件?

c# - 如何在 EWS API 上下载特定文件附件

php - Exchange Server 2007 Web 服务 PHP 类