rklandesverband / php-ews
Requires
- ext-curl: *
- ext-dom: *
- ext-libxml: *
- ext-simplexml: *
- ext-soap: *
- garethp/http-playback: ^1.0
Requires (Dev)
- goetas/xsd-reader: 2.*@dev
- goetas/xsd2php: 2.*@dev
- mockery/mockery: ~0.9.4
- phpunit/phpunit: ~4.8|~5.2
- squizlabs/php_codesniffer: ~2.3
- dev-master
- v0.10.7
- v0.10.6
- v0.10.5
- v0.10.2
- v0.10.1
- v0.10.0
- v0.9.9
- v0.9.8
- v0.9.7
- v0.9.6
- v0.9.5
- v0.9.4
- v0.9.3
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.11
- v0.7.10
- v0.7.9
- v0.7.8
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.7
- v0.6.6
- v0.6.5
- v0.6.4
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.11
- v0.5.10
- 0.5.9
- v0.5.8
- v0.5.7
- v0.5.6
- v0.5.5
- v0.5.4
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.1
- v0.4.0
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.0
This package is auto-updated.
Last update: 2024-09-29 06:02:54 UTC
README
PHP Exchange Web Services 库(php-ews)旨在简化使用 Exchange Web Services 与 Microsoft Exchange 服务器通信。它处理使用 SOAP 服务所需的 NTLM 认证,并提供用于构建请求所需的复杂类型的面向对象接口。
依赖项
- PHP 5.5+
- cURL 具有NTLM支持(推荐使用7.23.0+)
- Composer
- Exchange 2007 或 2010*
*注意:Exchange 2007 不支持所有操作或请求元素。
安装
需要 composer 包并使用
composer require garethp/php-ews
用法
可以使用库来制作几种不同的请求类型。为了发出请求,您需要实例化一个新的 API
对象
$ews = API::fromUsernameAndPassword($server, $username, $password, $options = array());
API::fromUsernameAndPassword
静态构造函数接受四个参数
$server
:您希望连接到的 Exchange 服务器的 URL,不带协议。例如:mail.example.com。$username
:用于连接服务器的用户。这通常是用户电子邮件地址的本地部分。例如:“user”,如果电子邮件地址是 "user@example.com"。$password
:用户的纯文本密码。$options
:(可选):要传入的一组选项$options['version']
:要连接的 Exchange 服务器版本。有效值可以在ExchangeWebServices::VERSION_*
中找到。默认为 Exchange 2010。$options['timezone']
:用于操作的时区。这不是 PHP 时区,而是 Exchange 定义的时区 ID。抱歉,我还没有列出它们。$options['httpClient']
:如果您想注入自己的 GuzzleClient 进行请求$options['httpPlayback']
:请参阅测试部分
一旦您有了 API
对象,您需要构建您的请求对象。对象的类型取决于您调用的操作。如果您正在使用具有代码补全功能的 IDE,它应该能够帮助您使用提供的 docblocks 确定正确的类。
请求对象构建类似于请求的 XML 主体。请参阅下面的资源部分以获取有关构建请求的更多信息。
简单库使用
正在进行简化某些操作的工作,以便您无需自己创建请求。示例位于 此处,可以浏览小片段。如果您想添加更多示例,只需为此创建一个 PR。如果您想请求示例,请提交一个 Github 问题,我会尽力创建它,如果我知道如何。
手动使用
虽然简单库使用是处理其覆盖范围的最佳方式,但它并未涵盖所有内容,实际上覆盖得相当少。如果您想执行其范围之外的操作,请使用 API::getClient()
作为通用 SOAP 客户端,并参考 Microsoft 文档了解如何构建请求。以下是一个示例
$api = API::withUsernameAndPassword($server, $username, $password); $start = new DateTime('8:00 AM'); $end = new DateTime('9:00 AM'); $request = array( 'Items' => array( 'CalendarItem' => array( 'Start' => $start->format('c'), 'End' => $end->format('c'), 'Body' => array( 'BodyType' => Enumeration\BodyTypeType::HTML, '_value' => 'This is <b>the</b> body' ), 'ItemClass' => Enumeration\ItemClassType::APPOINTMENT, 'Sensitivity' => Enumeration\SensitivityChoicesType::NORMAL, 'Categories' => array('Testing', 'php-ews'), 'Importance' => Enumeration\ImportanceChoicesType::NORMAL ) ), 'SendMeetingInvitations' => Enumeration\CalendarItemCreateOrDeleteOperationType::SEND_TO_NONE ); $request = Type::buildFromArray($request); $response = $api->getClient()->CreateItem($request);
测试
测试操作简单易行,利用我自制的HttpPlayback功能。HttpPlayback功能基本上是Guzzle内嵌的历史记录和模拟响应中间件。通过一个选项的切换,您可以运行所有API调用“实时”(无干扰)、“记录”(实时,但将所有响应保存到文件)或“回放”(使用记录文件进行响应,永不访问交换服务器)。这样,您可以编写测试,目的是实时运行、记录响应,然后轻松使用它们。您甚至可以有不同的phpunit.xml文件来切换它们,就像这个库所做的那样。以下是运行不同模式的示例
$client = API::withUsernameAndPassword( 'server', 'user', 'password', [ 'httpPlayback' => [ 'mode' => 'record', 'recordLocation' => __ROOT__ . DS . '/recordings.json' ] ] ); //Do some API calls here
这将记录所有响应到recordings.json文件。同样,要回放
$client = API::withUsernameAndPassword( 'server', 'user', 'password', [ 'httpPlayback' => [ 'mode' => 'playback', 'recordLocation' => __ROOT__ . DS . '/recordings.json' ] ] ); //Do some API calls here
然后这些调用将从记录的文件中回放,允许您在不触及实时服务器的情况下,完全测试所有逻辑,同时仍然可以通过更改模式选项来验证它是否真正在发布前有效。
版本控制
此组件的版本控制是为了符合semver标准。这意味着任何导致的BC(向后兼容)破坏都将导致主版本号增加(例如:1.x -> 2.x),而不会导致BC破坏的新功能将导致次版本号增加(例如:1.1.x -> 1.2.0),以及不会导致新功能或BC破坏的错误修复将导致补丁号增加(例如:1.0.0 -> 1.0.1)。例外情况是开发预1.0版本,其中次版本号被视为主版本,补丁号被视为补丁和次版本号。这意味着您可以将Composer锁定为0.6.*,而不会收到任何BC破坏,因为BC破坏会导致次版本号更改。
资源
支持
所有问题都应使用问题队列。这允许社区贡献并从您可能遇到的问题或问题中受益。任何发送到我的电子邮件地址的支持请求都将被引导至此。
贡献
欢迎贡献!
贡献代码
如果您想贡献代码,请在本github上的仓库中进行Fork,并向master分支提交一个pull request。建议您在单独的分支中更改您的Fork,然后使用该分支进行pull request。如果您希望在git之外获得贡献的认可,请将您的姓名和电子邮件地址(可选)添加到CONTRIBUTORS.txt文件中。所有贡献都应遵循PSR-1和PSR-2编码标准。如果您对还需要完成的事情的列表感兴趣,请查看TODO.md文件
贡献文档
如果您想为文档做出贡献,请在此仓库中对文档进行PR,以examples/文件夹中的文档为例。我请求您不要更改主页,但其他页面(包括新页面)都是公平的。请为任何您所做的更改留下描述性的日志消息。