使用多个 Exchange 帐户

适用于:Outlook 2013 | Outlook 2016

Microsoft Outlook 2010和Microsoft Outlook 2013支持与多个 Exchange 电子邮件帐户的集成。 在 Outlook 2010 或 Outlook 2013 中,用户可以将两个 Exchange 帐户添加到同一配置文件中,并仍享有丰富的 Exchange 功能,例如已发布的全局地址列表 (GAL) 、Exchange 外出配置和文件夹共享。

熟悉 Microsoft Office Outlook 2007 及更早版本的 MAPI 配置文件部分的人员知道,Exchange 设置(如电子邮件用户名和服务器名称)存储在固定 Exchange 全局配置文件部分 pbGlobalProfileSectionGuid 中。 在 Outlook 2010 和 Outlook 2013 中,每个 Exchange 帐户都需要自己的配置文件部分来存储设置,从而使 pbGlobalProfileSectionGuid 过时。

Outlook 2010 和 Outlook 2013 Exchange 设置仍存储在配置文件中,但包含其设置的配置文件部分的唯一标识符是按配置文件动态分配的。 配置文件中 Exchange 设置的位置存储在 PidTagExchangeProfileSectionId 规范属性中,该属性可在 Exchange 帐户的邮件服务配置文件部分找到。 还可以在帐户的此消息服务中每个提供程序的配置文件部分找到此属性。 唯一标识符不存储在服务器上,并且会在不同的配置文件中有所不同。

Outlook 2010 和 Outlook 2013 使用 PidTagExchangeProfileSectionId 作为指定 Exchange 帐户的唯一标识符。 以这种方式使用时,此唯一标识符称为 emsmdbUID。 对于某些 MAPI 和 Outlook 操作,可能需要 一个 emsmdbUID 来指定应用于该操作的 Exchange 帐户。

为了支持多个 Exchange 帐户,必须在代码中使用对新函数的一些调用。 将 IMailUser 上使用 entryIDIAddrBook::OpenEntryIAddrBook::CompareEntryIDs 的任何调用替换为以下函数之一。

旧版支持

创建此新的 emsmdbUID 节之前编写的任何 MAPI 客户端仍受支持。 这些客户端将继续检索上一个全局部分 pbGlobalProfileSectionGuid。 此配置文件部分的查询将重定向到一个用于处理旧版查询的指定 Exchange 帐户。 可以通过查看消息服务表并添加PR_EMSMDB_LEGACY列来确定处理旧调用的帐户。 只有一个消息服务将此设置设置为 true,其 PidTagExchangeProfileSectionId 称为旧版 emsmdbUID

注意

可配置的 MAPI 设置(例如默认存储和默认帐户)对处理旧调用的帐户没有影响。 无法配置处理旧调用的帐户。

旧帐户的 emsmdbUID 将复制到 Outlook 全局配置文件部分。 如果此属性不存在,则查询邮件服务表将确定哪个帐户是旧版处理程序,并在 Outlook 全局配置文件部分设置值。

需要清楚的是,Outlook 全局配置文件部分不同于 Exchange 全局配置文件部分,在 Outlook 2010 和 Outlook 2013 中,Exchange 全局配置文件部分不再真正全局,因为您可以拥有多个 Exchange 帐户。 Outlook 全局配置文件部分包含有关 Outlook 的属性,例如文件夹 MRU 的状态或全局连接的状态。

通讯簿帐户上下文

若要使用多个 Exchange 帐户正确解析地址,请使用采用帐户上下文的新函数,以便对通讯簿的调用搜索正确的 Exchange 帐户。

以前的一些通讯簿 API 已弃用,因为这些 API 并非完全支持多个 Exchange。 此帐户上下文通常是 emsmdbUID

除了 emsmdbUID,多个 Exchange 帐户还具有 emsabpUID

  1. emsmdbUID 值标识帐户上下文。

  2. emsabpUID 值标识 Exchange 通讯簿提供程序。

emsabpUID 值通常在解析收件人时使用。 使用 IAddrBook::ResolveName 解析收件人时,Exchange 收件人行包含 PR_AB_PROVIDERS (0x3D010102) 属性,其中包含 emsabpUID 值。 此 emsabpUID 值标识特定收件人的 Exchange 通讯簿提供程序。

如果要确定特定 emsmdbUID 的 emsabpUID 值,请打开 emsmdbUID 的配置文件部分,并获取 PR_EMSABP_USER_UID (0x0x3D1A0102) 属性。

如果要调用 IAddrBook::P repareRecips,请确保传入列表中的 Exchange 收件人包含 PR_AB_PROVIDERS 属性,该属性具有与收件人所属的通讯簿提供程序对应的 emsabpUID 。 对从 IAddrBook::ResolveName 获取的行调用 IAddrBook::P repareRecips 不需要其他操作,但某些代码将对仅包含 PR_ENTRYID 属性的行调用 IAddrBook::P repareRecips 在此和类似情况下的行应包含 PR_ENTRYIDPR_AB_PROVIDERS,PR_AB_PROVIDERS属性 设置为正确的 emsabpUID

解析多个 Exchange 帐户的过程的简单说明如下:

  • 给定服务唯一标识符,代码将查找与你拥有的属性匹配的 PR_SERVICE_UID 属性的消息存储表中。 可以在此处确定正确的 PR_MDB_PROVIDER。 此行包含相应的存储区。

  • 给定 emsmdbUID,代码会在消息服务表中查找公开与 emsmdbUID 匹配的 PidTagExchangeProfileSectionId 的行。

另请参阅

HrCompareABEntryIDsWithExchangeContext

HrDoABDetailsWithExchangeContext

HrDoABDetailsWithProviderUID

HrGetGALFromEmsmdbUID

HrOpenABEntryUsingDefaultContext

HrOpenABEntryWithExchangeContext

HrOpenABEntryWithProviderUID

HrOpenABEntryWithProviderUIDSupport

HrOpenABEntryWithResolvedRow

HrOpenABEntryWithSupport

PidTagExchangeProfileSectionId 规范属性

如何打开全局配置文件部分