状态表和状态对象

适用于:Outlook 2013 | Outlook 2016

MAPI 提供了一个表,其中包含有关 MAPI 子系统、MAPI 后台处理程序、通讯簿或特定服务提供程序的状态信息。 可以通过调用 IMAPISession::GetStatusTable 来访问此表。

状态表中的每一行都表示 MAPI 或服务提供商实现的状态对象。 可以使用状态对象显示提供程序的配置属性表、更改提供程序密码、上传或下载消息,以及与特定传输提供程序通信。

可通过两种方式访问状态对象:

  • 通过状态表

  • 通过登录对象的 OpenStatusEntry 方法

由于登录对象对客户端不可用,因此必须使用状态表来访问状态对象。 状态表方法是间接的,需要在打开 status 对象之前进行几次调用,并返回指向其 IMAPIStatus 实现的指针。

使用状态表打开状态对象

  1. 调用 IMAPIStatus::GetStatusTable 以检索 IMAPITable 指针。

  2. 调用状态表的 IMAPITable::SetColumns 方法,将列设置为 PR_ENTRYID (PidTagEntryId) ,PR_RESOURCE_TYPE (PidTagResourceType) ,PR_DISPLAY_NAME (PidTagDisplayName) 。

  3. 将表视图限制为特定的状态对象。 对于 MAPI 实现,客户端可以使用 PR_RESOURCE_TYPE 定义属性限制。 对于服务提供程序实现,客户端可以限制 PR_PROVIDER_DISPLAY (PidTagProviderDisplay) 、提供程序的名称,或者 限制PR_PROVIDER_DLL_NAME (PidTagProviderDllName) 提供程序 DLL 文件的名称。

  4. 调用 IMAPITable::Restrict 设置限制。

  5. 调用 HrQueryAllRows,传入 SPropertyRestriction 结构,以检索表示提供程序状态的行。

  6. 调用 IMAPISession::OpenEntry,指定状态表行中的条目标识符,打开状态对象并检索 IMAPIStatus 指针。

若要显示属性表,请为目标提供程序调用 status 对象的 IMAPIStatus::SettingsDialog 方法。 SettingsDialog 显示属性表,用于查看和在某些情况下更改提供程序的配置属性。

若要与传输提供程序通信,请调用其状态对象的 IMAPIStatus::ValidateState 方法。 ValidateState 可以重新配置传输提供程序,阻止提供程序显示用户界面,并控制涉及从远程服务器下载消息标头的会话,具体取决于传入的标志。 例如,若要取消远程标头的下载,请将 ABORT_XP_HEADER_OPERATION 标志传递给 ValidateState。 若要连接或断开与远程服务器的连接,请传递FORCE_XP_CONNECT或FORCE_XP_DISCONNECT。 若要重新配置提供程序,请传递CONFIG_CHANGED。

实现按需发送或接收消息的客户端调用传输提供程序的 或 MAPI 后台处理程序的 IMAPIStatus::FlushQueues 方法。 可以将三个标志传递到 方法中:FLUSH_UPLOAD、FLUSH_DOWNLOAD 和 FLUSH_FORCE。 FLUSH_UPLOAD指示提供程序或 MAPI 后台处理程序发送在输出队列中等待的任何消息,而FLUSH_DOWNLOAD指示提供程序或 MAPI 后台处理程序接收任何传入消息。 可以使用其他任一标志设置FLUSH_FORCE,以便无论时间如何,状态对象都会执行刷新。

不要期望能够对任何 MAPI 子系统、MAPI 后台处理程序或通讯簿状态对象调用 SettingsDialogChangePassword 。 子系统和通讯簿状态对象仅支持 ValidateState;MAPI 后台处理程序状态对象支持 FlushQueues 以及 ValidateState

另请参阅

状态表

MAPI 状态对象