Exchange 中的代理访问和 EWS

了解如何在 Exchange 中使用 EWS 托管 API 和 EWS 来提供对用户邮箱的委托访问权限。

可通过以下三种方式之一使用户能够访问其他用户的邮箱:

  • 为每个代理添加代理并指定权限。

  • 直接修改文件夹权限。

  • 使用模拟。

代理和文件夹权限最适用于仅授予几个用户访问权限的情况,因为你必须对每个邮箱单独添加权限。 当处理多个邮箱时,模拟是最佳选择,因为你可以轻松地启用一个服务帐户授予来访问数据库中的每个邮箱。 图 1 显示了每种类型的访问权限之间的一些差异。

图 1. 访问其他用户邮箱的方法

显示邮箱访问类型、邮箱所有者与每种类型的委派之间的关系以及权限类型的图表。代表委派权限和/或文件夹权限发送。用于模拟的发送身份权限。

在发送邮件或安排会议时,可以向代理人授予“代表发送”权限,因此,在 Outlook 中收到电子邮件或会议请求时,代理人发送的电子邮件或会议请求的收件人将看到“代表邮箱所有者代理人”。 包括“代表发送”文本是一个客户端实现详细信息,它可以通过使用“发件人”和“发送者”值创建。 “发件人”值表示邮箱所有者,而“发送者”值表示发送邮件的代理。 如果模拟用户的服务帐户代表邮箱所有者发送电子邮件或安排会议,则邮件将以邮箱所有者的身份“发送”。 收件人无法知道该邮件是由服务帐户发送的。 授予了文件夹权限但未委派访问权限的用户不能“代表”邮箱所有者发送邮件。 他们可以访问邮箱文件夹,并且也许能在文件夹中创建项,但无法发送这些项。

什么时候最适合直接修改文件夹权限? 一般情况下,以下这些情况最适合:要向用户提供对文件夹的访问权限,但不想授予用户“代表发送”权限时;权限要求不会映射到 DelegateFolderPermissionLevel EWS 托管 API 枚举值或 PermissionLevel EWS 元素值时;或者要向用户提供对单个自定义文件夹的访问权限时。

如果只需要修改文件夹权限即可实现目标,并且不需要添加代理(即不需要“代表发送”权限),那么请参阅在 Exchange 中使用 EWS 为其他用户设置文件夹权限

请注意,还可以使用 OutlookExchange Server PowerShell (Exchange Management Shell) 设置代理访问权限。

代理访问的工作原理是什么?

通过代理访问,用户可以访问某些或全部邮箱所有者的文件夹,并代表邮箱所有者执行操作。 邮箱所有者可以是用户或资源,如会议室。 例如,可以向接待员授予对会议室日历文件夹的代理权限,以处理预订请求。 可以使用 EWS 托管 API 或 EWS 使邮箱所有者或管理员能够添加代理、指定代理可以访问的文件夹,然后指定该文件夹的权限。 可以向代理授予对以下文件夹的访问权限:

  • 日历

  • 任务

  • Inbox

  • 联系人

  • 注释

  • 日志

当用户具有对其中一个或多个文件夹的代理访问权限时,他们可以创建、获取、更新、删除、复制和搜索该文件夹中的项和任何子文件夹,具体取决于对文件夹设置的权限。 应用程序执行这些操作的方式取决于是需要显式访问还是隐式访问。

委派权限

当管理员或邮箱所有者将代理添加到邮箱时,他们还可以为一个或多个文件夹设置权限级别。 如果没有为文件夹设置权限级别,则权限值默认为 None(无)。 多个用户可以对某个文件夹拥有相同的权限级别,并且用户可以对不同文件夹拥有不同的权限级别。 如果使用的是 EWS 托管 API,则使用 DelegateUser.Permissions 属性(其中针对每个文件夹都包含一个 DelegateFolderPermissionLevel 枚举值)来设置文件夹的代理权限。 如果使用的是 EWS,则使用 DelegatePermissions 元素设置代理权限,使用 PermissionLevel 元素定义权限级别。

表 2. 委托权限级别

权限级别 说明

此为所有文件夹的默认值。
作者
代理可以读取和创建项,并修改和删除所创建的项。 例如,代理可以直接在邮箱所有者的任务或日历文件夹中创建任务请求和会议请求,然后代表邮箱所有者发送任一项。
编辑器
代理可以执行创建者可以执行的一切操作,还可以修改和删除邮箱所有者创建的项。
Reviewer
代理可以读取项;例如,具有审阅者权限的代理可以在其他人的收件箱中读取邮件。
自定义警报
邮箱所有者已向代理授予一组自定义权限。

DelgateUser.ViewPrivateItems EWS 托管 API 属性和 ViewPrivateItems EWS 元素是影响所有邮箱所有者文件夹(包括所有邮件、联系人、日历、任务、笔记和日记文件夹)的全局设置。 不能仅允许访问一个文件夹中的专用项。

显式访问

简单地说,显式访问是代理对邮箱所有者的文件夹或项执行操作的入口方式。 当代理包含邮箱所有者文件夹的已知文件夹名称以及邮箱所有者对服务器的请求中的 SMTP 地址时,将向代理授予显式访问权限。 这种访问是显式的,因为代理的请求明确指出,该方法或操作的上下文是邮箱所有者的邮箱,而不是代理的邮箱。

显式访问定义对前移的文件夹或项执行的所有方法或操作的上下文。 设置显式访问权限时返回的所有项和文件夹 ID 都唯一地标识为属于邮箱所有者(尽管没有任何人工可读格式)。 这样,应用程序就无需一次又一次地指定邮箱所有者的 SMTP 地址;上下文隐藏在标识符中。 标识项或文件夹后,代理实际上使用隐式访问来修改项。 下图显示了获取显式访问和隐式访问的流程。

图 2. 请求对项目或文件夹的显式和隐式访问权限

显示应用程序发送显式访问请求并从服务器获得响应,然后发送隐式访问请求并从服务器获得响应的图表。

可以在许多不同方案中设置显式访问。 基本上,你在一个方法或操作中发送一个文件夹 ID 时,都可以设置显式访问。 这可以包括查找文件夹、查找约会、获取项、查找对话等。

显式访问和 EWS 托管 API

可以使用以下任何采用 FolderId 输入参数来标识目标文件夹的重载方法来启动代理显式访问:

可以使用这些方法中的 FolderId 参数来标识邮箱所有者的目标文件夹,如下所示。

new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com");

例如,若要绑定到日历文件夹,此绑定方法中的 FolderId 将指定已知文件夹名称和邮箱所有者的 SMTP 地址。

CalendarFolder calendar = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), new PropertySet());

通过指定已知文件夹名称和 SMTP 地址,代理可以绑定到邮箱所有者的日历文件夹,从而获得对该文件夹的显式访问权限。 随后所有对文件夹中项的隐式访问请求,都依赖于项 ID 和文件夹 ID 中返回的上下文。 从本质上讲,标识符包含了隐含的代理访问调用的上下文。 或者,若要检索满足特定条件的项的 ID,使用以下命令。

FindItemsResults<Item> results = service.FindItems(new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), filter, view);

在这种情况下,将返回项 ID,然后代理可以使用隐式访问权限通过使用项 ID 对项进行更改。

在需要未通过现有显式访问权限访问的项 ID 或文件夹 ID 之前,无需再次启动显式访问。

显式访问和 EWS

可以使用 GetFolderFindItemFindFolder 操作启动显式访问。 这些操作提供了使用 DistinguishedFolderId 元素标识目标文件夹的选项。 DistinguishedFolderId 元素具有单个可选子元素,即邮箱元素。 邮箱元素用作 DistinguishedFolderId 元素的子元素时,将指定要访问的代理的邮箱。 如果调用用户有权访问邮箱所有者的文件夹,则答复中将包含该邮箱中项或文件夹的标识符集合。 答复中返回的项和文件夹标识符可用于隐式代理访问。

隐式访问

隐式访问是在代理在邮箱所有者的邮箱中检索到项或文件夹的 ID 后,代理想更新、删除或复制该项时使用。 当代理在请求中使用该项或文件夹 ID 时,将更改邮箱所有者邮箱中的项。 代理不必包含邮箱所有者的 SMTP 地址。

例如,当代理拥有邮箱所有者的某个文件夹的 ID 时,该代理可以使用文件夹 ID 对该文件夹执行 FindItem 操作,而无需显式标识邮箱所有者的邮箱。 此时,代理可以使用答复中返回的 ID 对邮箱所有者的文件夹执行操作。

隐式访问和 EWS 托管 API

如果 FindItems 方法检索了项 ID,则可以在后续 Item.Bind 方法调用中使用该项 ID 来绑定到该项。 然后,可以根据需要调用 Item.UpdateItem.DeleteItem.Copy 方法或任何需要项 ID 的方法调用来完成任务。 只要代理对包含项的文件夹(如果适用,该项要移到的文件夹)有适当的权限,代理就可以根据其权限级别进行更改。

隐式访问和 EWS

如果 FindItem 操作检索了项 ID,则可以在后续 GetItem 操作中使用该项 ID 来绑定到该项。 然后,可以根据需要调用 UpdateItemDeleteItemCopyItem 操作或任何需要项 ID 的操作来完成任务。 只要代理对包含项的文件夹(如果适用,该项要移到的文件夹)有适当的权限,代理就可以根据其权限级别进行更改。

本节内容

另请参阅