php - 使用 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。
那么有什么方法可以先根据主机、用户名和密码找出服务器版本?这样我就可以使用它来创建客户端对象
解决方案
对于您的问题:通常,当您在响应中执行对 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)的功能,则可以执行此操作。
推荐阅读
- laravel - 如何使用模型注入但没有中间件来测试控制器?
- angular - 如何解决开发 MEAN 堆栈应用程序时无法识别 mongod 的问题?
- kubernetes - 如何在 Kubernetes 中公开一系列端口?
- python - 如何使用python在实时视频文件中从车辆中裁剪车牌
- css - 在输入上设置全角
- python - 如何修复python中的构造函数
- node.js - 如何让 Electron 和 Socket.io 应用程序在瘦客户端架构中运行?
- debugging - Go 程序运行时错误并打印出所有内容
- django - 模型()缺少 1 个必需的位置参数:“请求”
- python-3.x - 将搜索参数添加到 URL Python Scrapy