首页 > 解决方案 > 使用 php-ews 获取 ms 交换服务器版本

问题描述

我正在使用php-ews库(新版本)来显示我项目中用户的日历事件。用户可以在他们的个人资料中设置他们的 ms Exchange 帐户详细信息,然后在我的项目本身中使用日历。代码如下

$host = '{host_set_on_users_profile}';
$username = '{username_set_on_users_profile}';
$password = '{password_set_on_users_profile}';
$version = Client::VERSION_2016;

$client = new Client($host, $username, $password, $version);
$client->setTimezone($timezone);

// Build request
$request = new FindItemType();
// more request building code here

$response = $client->FindItem($request);

但我收到以下问题

[faultstring] => The specified server version is invalid.

原因是我使用了固定的 VERSION_2016,用户可以为该帐户设置任何版本的 ms exchange。

那么有什么方法可以先根据主机、用户名和密码找出服务器版本?这样我就可以使用它来创建客户端对象

标签: phpsoapexchange-serverexchangewebservicesphp-ews

解决方案


对于您的问题:通常,当您在响应中执行对 Exchange 的请求时,您还会获得响应 Exchange 服务器的版本。请参阅https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/expanddl-operation#successful-expanddl-response-example文档中的标题元素虽然您没有得到一个可读性好的年份版本这个版本号对应某个版本。

话虽如此,您可以例如使用虚拟邮件地址发出第一个简单的虚拟请求(如 expandDL),然后获取所有后续请求的版本。或者更好的是,您将第一个 FindItem 请求的版本设置为 2007,然后使用响应检索正确的版本。

另一种选择是将您的请求版本始终设置为 2007,这是可能的最低版本。如果您不需要来自更高 Exchange 版本(如 GetInboxRule 或 GetPhoneCallInformation)的功能,则可以执行此操作。


推荐阅读