如何使用 Exchange Web 服务为其他用户查找日历项目

Posted

技术标签:

【中文标题】如何使用 Exchange Web 服务为其他用户查找日历项目【英文标题】:How to use Exchange Web Services to find calendar items for other users 【发布时间】:2015-09-04 20:44:08 【问题描述】:

我想编写一些代码来查询 Exchange Server 以查找一组用户的日历条目。这可能吗?

我是使用 EWS 的新手。我发现很难找到任何好的概述文档来指导我应该如何使用它。

无论如何,我正在尝试的代码是这样的:

                    DateTime startDate = new DateTime(2015, 8, 1);
                    DateTime endDate = new DateTime(2015, 11, 1);
                    CalendarView calView = new CalendarView(startDate, endDate);

                    Mailbox mb = new Mailbox(@"somebodyelse@corp.testcompany.com");

                    FolderId fid = new FolderId(WellKnownFolderName.Calendar, mb);

                    FindItemsResults<Item> instanceResults = service.FindItems(fid, calView);

最后一行抛出一个 ServiceResponseException :“在商店中找不到指定的文件夹。”

上述方法是否接近正确?无论如何,也许有一种完全不同且更好的方法来做到这一点?

请注意,我上面的服务对象是一个 ExchangeService 对象,我使用管理员@corp.testcompany.com 的凭据设置它。我希望管理员用户有权查看其他用户的日历,但也许这也必须在 Exchange 的某个地方明确设置?

【问题讨论】:

【参考方案1】:

您的代码很好。您遇到的错误可能与目标邮箱的访问权限有关。默认情况下,管理员无法访问其他用户邮箱。

要让一个用户访问另一个用户的邮箱,你可以使用powershell或者exchange管理控制台:

通过 powershell:

打开交易所管理外壳并运行以下命令:

Add-MailboxPermission -Identity "User1" -User "User2" -AccessRights FullAccess -InheritanceType All

这将使 User2 可以访问 User1 的邮箱。

查看this了解更多详情。

通过交易所管理控制台:

打开exchange管理控制台,进入收件人配置->邮箱,然后选择目标用户。右键单击用户,然后单击“管理完全访问权限”。

从那里,添加您要访问邮箱的用户,然后点击“管理”。

请注意,这是基于 Exchange 2010。在不同的 Exchange 版本上,这可能会有所不同。我猜powershell命令是一样的,但是基于GUI的配置可能不同。

【讨论】:

非常感谢。差不多就是这样。使用 Exchange 2013,我打开了 Exchange 管理中心;收件人;邮箱;单击列表中的一个用户;编辑;选择邮箱委托;向下滚动到“完全访问”;将原始用户作为委托添加到此目标用户。话虽这么说,我不认为添加为所有用户的代表是我需要的。看来我应该改用 Exchange 模拟。我将有一个服务帐户,它将检查所有用户的邮箱以获取一些日历信息。再次感谢您的帮助。

以上是关于如何使用 Exchange Web 服务为其他用户查找日历项目的主要内容,如果未能解决你的问题,请参考以下文章

测试 Exchange Web 服务 (EWS) 网址

Exchange Web 服务通知

Exchange Web 服务连接失败

Exchange Web 服务 - 如何使用 Account 扩展属性检索联系人

Exchange Web 服务托管 API:如何通过 FindItem 方法执行重复扩展?

使用 TokenCredentials 的 Exchange Web 服务 (EWS) 单点登录?