IXPLogon::StartMessage

适用于:Outlook 2013 | Outlook 2016

启动从传输提供程序到 MAPI 后台处理程序的入站消息传输。

HRESULT StartMessage(
  ULONG ulFlags,
  LPMESSAGE lpMessage,
  ULONG FAR * lpulMsgRef
);

参数

ulFlags

[in]保留;必须为零。

lpMessage

[in]指向消息对象的指针 (表示具有读/写权限的入站消息) ,传输提供程序使用该权限访问和操作该消息。 此对象在传输提供程序从 IXPLogon::StartMessage 的调用返回之前保持有效。

lpulMsgRef

[out]指向分配给消息的引用值的指针。 MAPI 后台处理程序在返回指向传输提供程序的指针之前,将此值初始化为 1。

返回值

S_OK

调用成功,并返回了预期的值。

备注

MAPI 后台处理程序调用 IXPLogon::StartMessage 方法,以启动从传输提供程序到 MAPI 后台处理程序的入站消息传输。 在传输提供程序开始使用 lpMessage 指向的消息之前,它应将消息引用存储在 lpulMsgRef 参数中,以供调用 IXPLogon::TransportNotify 方法使用。

StartMessage 调用期间,MAPI 后台处理程序处理在传输消息期间打开的对象的方法,并且还处理任何附件。 此处理可能需要很长时间。 在此处理过程中,传输提供程序可以频繁调用 MAPI 后台处理程序的 IMAPISupport::SpoolerYield 回调函数,以释放其他系统任务的 CPU 时间。

传输提供程序为邮件创建的收件人表中的所有收件人必须包含所有必需的寻址属性。 如有必要,提供程序可以构造一个表示特定收件人的自定义收件人。 但是,如果提供程序可以生成包含详细信息的收件人条目,则应这样做。 例如,如果传输提供程序具有有关通讯簿提供程序收件人格式的足够信息,因此它可以为该格式的收件人生成有效的条目标识符,则应生成条目标识符。

如果收到任何不可传输的属性,传输提供程序不应将它们存储在新消息中。 但是,传输提供程序应将其接收的所有可传输属性存储在新消息中。

如果传入消息是传递报告或非送达报告,并且传输提供程序无法使用 IMAPISupport::StatusRecips 方法从原始消息生成报告,则提供程序本身应使用适当的属性填充消息。 但是,传输提供程序无法 (PidTagEntryId) 属性设置消息PR_ENTRYID。

若要在处理后将传入消息保存在相应的 MAPI 消息存储中,传输提供程序调用 IMAPIProp::SaveChanges 方法。 如果传输提供程序没有任何要传递给 MAPI 后台处理程序的消息,则它可以通过从 StartMessage 调用返回而不调用 SaveChanges 来停止传入消息。

应在返回之前释放传输提供程序在 StartMessage 调用期间打开的所有对象。 但是,提供程序不应释放 MAPI 后台处理程序最初在 lpMessage 参数中传递的消息对象。

如果 StartMessage 返回错误,则会释放进程中的消息,而不会保存更改并丢失。 在这种情况下,传输提供程序应通过调用 IMAPISupport::SpoolerNotify 方法传递NOTIFY_CRITICAL_ERROR标志,并调用 IXPLogon::P oll 方法,以通知 MAPI 后台处理程序处于严重错误状态。

有关详细信息,请参阅 与 MAPI 后台处理程序交互

另请参阅

IMAPIProp::SaveChanges

IMAPISupport::SpoolerNotify

IMAPISupport::SpoolerYield

IMAPISupport::StatusRecips

IMessage::GetRecipientTable

IXPLogon::Poll

IXPLogon::TransportNotify

IXPLogon : IUnknown