打开邮件存储

适用于:Outlook 2013 | Outlook 2016

根据配置文件,客户端需要在典型会话期间打开一个或多个消息存储。 打开消息存储意味着获取指向其 IMsgStore :IMAPIProp 实现的指针的访问权限。 IMsgStore 接口提供通知、进行文件夹分配以及访问文件夹和邮件的方法。

客户端打开的消息会在登录时和配置文件被修改时存储。 如果客户端允许用户在活动会话期间将消息存储添加到配置文件,则可以立即打开它们,或者在下一个会话之前忽略它们。 通过在消息存储表上注册通知,系统会提醒你新消息存储的可用性。

若要打开消息存储区,必须提供其条目标识符。 大多数客户端访问他们希望通过消息存储表打开的消息存储的条目标识符。 但是,某些消息存储会记录其条目标识符的格式,从而使客户端能够绕过消息存储表并构造必要的条目标识符。 他们可以将此条目标识符直接传递给 IMAPISession::OpenMsgStore,MAPI 会自动为提供程序创建配置文件部分,而无需将其与任何消息服务相关联。

从消息存储表中检索条目标识符

  1. 调用 IMAPISession::GetMsgStoresTable 以打开消息存储表。

  2. 调用 IMAPITable::SetColumns 将表限制为包含以下列的小列集:

    • PR_PROVIDER_DISPLAYPR_DISPLAY_NAME
    • PR_ENTRYID 属性
    • PR_MDB_PROVIDER
    • PR_RESOURCE_FLAGS
  3. 生成限制以筛选出表示要打开的消息存储的行。 有关查找默认消息存储的详细信息,请参阅 打开默认消息存储。 若要按名称查找消息存储,请应用以下任何属性限制:

    • PR_PROVIDER_DISPLAY (PidTagProviderDisplay) 与这种类型的消息存储的通用名称匹配。 例如,PR_PROVIDER_DISPLAY可能设置为“个人文件夹”。

    • PR_MDB_PROVIDER (PidTagStoreProvider) 与此类消息存储的特定 MAPIUID 匹配。

    • PR_DISPLAY_NAME (PidTagDisplayName) 与此特定消息存储区的名称相匹配。 例如, PR_DISPLAY_NAME 可能设置为“2010 财年的邮件”。

  4. 调用 HrQueryAllRows 以从消息存储表中检索相应的行。 行的条目标识符将包含在 pprows 参数指向的行集的 aRow 成员的属性值数组中。

  5. 调用 FreeProws 以释放 pprows 指向的行集。

  6. 通过调用其 IUnknown::Release 方法释放消息存储表。

如果已为要打开的消息存储创建自定义条目标识符,请调用 WrapStoreEntryID 函数将其转换为标准条目标识符。

拥有消息存储的条目标识符后,调用以下方法之一将其打开:

如果需要为消息存储指定各种特殊选项,请调用 OpenMsgStoreOpenMsgStore 允许禁止显示对话框、将消息存储标识为临时存储或非消息存储、设置访问级别以及延迟错误。 OpenEntry 仅允许设置访问级别并延迟错误。

设置MDB_NO_MAIL标志向 MAPI 指示消息存储将不用于发送或接收消息。 MAPI 不会通知 MAPI 后台处理程序存在此消息存储区。 MDB_TEMPORARY标志将消息存储指定为临时消息存储,这意味着它不能用于存储永久信息。 临时消息存储不显示在消息存储表中。

另请参阅