消息接收模型

适用于:Outlook 2013 | Outlook 2016

传输提供程序控制 MAPI 后台处理程序是否必须轮询它以查找传入邮件,或者在新邮件到达时是否对 MAPI 后台处理程序执行回调用。 传输提供程序在从 IXPProvider::TransportLogon 返回请求轮询时设置SP_LOGON_POLL标志。 否则,当传入邮件可用时,传输提供程序使用 IMAPISupport::SpoolerNotify 。 了解传入邮件可用后,MAPI 后台处理程序会打开一封新邮件,并要求传输提供程序将收到的邮件属性存储在邮件中。

此过程的工作原理如下:

  1. 可用消息由调用 IMAPISupport::SpoolerNotify 的传输提供程序或调用 IXPLogon::P oll 的 MAPI 后台处理程序指示。

  2. MAPI 后台处理程序调用 IXPLogon::StartMessage 来启动该过程。

  3. 传输提供程序将引用值放置在 StartMessage 中引用的位置。 这些引用值允许传输提供程序和 MAPI 后台处理程序跟踪要传递多个消息时正在处理的消息。

  4. 传输提供程序将消息数据存储到传递的 IMessage : IMAPIProp 实例中。

  5. 传输提供程序调用 IMessage 实例上的 IMAPIProp::SaveChanges 方法,并从 StartMessage 返回。

  6. 如果 MAPI 后台处理程序必须停止消息传递,则它调用 IXPLogon::TransportNotify

注意

如果传输提供程序必须传递大量消息,并且传输提供程序使用 IMAPISupport::SpoolerNotify 而不是 IXPLogon::P oll,则应注意不要过于频繁地调用 SpoolerNotify ,以免剥夺其他传输提供程序的 CPU 时间。 MAPI 后台处理程序确实具有防止这种情况发生的逻辑,但通常 ,SpoolerNotify 调用之间的间隔应比传输提供程序处理一条消息所花费的时间长。 > 此外,MAPI 后台处理程序可能不会立即处理传入消息。 MAPI 后台处理程序可能会要求传输提供程序在接收传入消息之前执行其他任务。