IXPLogon::TransportNotify

适用于:Outlook 2013 | Outlook 2016

指示传输提供程序请求通知的事件的发生。

HRESULT TransportNotify(
  ULONG FAR * lpulFlags,
  LPVOID FAR * lppvData
);

参数

lpulFlags

[in,out]向通知事件发出信号的标志的位掩码。 以下标志可由 MAPI 后台处理程序在输入时设置,并且必须在输出中原样返回:

NOTIFY_ABORT_DEFERRED

通知传输提供程序,它接受其责任的消息将被推迟。 只有支持延迟的传输提供程序必须支持此标志。 lppvData 参数指向已取消消息的入口标识符。 仍可通过调用 IMsgStore::AbortSubmit 方法延迟 MAPI 后台处理程序尚未处理的消息。

NOTIFY_BEGIN_INBOUND

MAPI 后台处理程序现在可以接受此传输提供程序会话的入站消息。 如果传输提供程序在登录时使用 IXPProvider::TransportLogon 调用设置了LOGON_SP_POLL标志,MAPI 后台处理程序会定期调用 IXPLogon: :P oll 方法。 设置NOTIFY_BEGIN_INBOUND标志后,MAPI 后台处理程序将遵循调用 IMAPISupport::SpoolerNotify 方法时传递的NOTIFY_NEWMAIL标志。 在返回之前,应通过调用 IMAPISupport::ModifyStatusRow 方法更新传输提供程序会话的状态表行。 NOTIFY_BEGIN_INBOUND和NOTIFY_END_INBOUND标志是相互排斥的。

NOTIFY_BEGIN_INBOUND_FLUSH

指示传输提供程序尽快循环访问入站消息。 为了遵守此通知,传输提供程序应尽快使用 ModifyStatusRow 在其状态表行的 PR_STATUS_CODE (PidTagStatusCode) 属性中设置STATUS_INBOUND_FLUSH标志。 当提供程序确定已下载所有内容时,或者当它已收到设置了 NOTIFY_END_INBOUND_FLUSH 标志的 TransportNotify 方法调用时,入站消息传送周期即会完成。 在入站消息传送周期结束之前,提供程序不应调用 IMAPISupport::SpoolerYield 方法或以其他方式向操作系统放弃周期以加快传入消息的传递速度。 这是可以接受的,因为 MAPI 后台处理程序通常仅使用 NOTIFY_BEGIN_INBOUND_FLUSH 来响应用户的请求(通过客户端应用程序)立即传递所有消息。 在入站刷新操作结束时,提供程序应使用 SpoolerNotify 清除其状态行的 PR_STATUS_CODE 属性中的 STATUS_INBOUND_FLUSH 标志。

NOTIFY_BEGIN_OUTBOUND

现在可以为此传输提供程序会话执行出站操作。 如果为此提供程序发送任何消息,则会调用 IXPLogon::SubmitMessage 方法。 应在返回之前更新此会话的状态表行。 NOTIFY_BEGIN_OUTBOUND和NOTIFY_END_OUTBOUND标志是相互排斥的。

NOTIFY_BEGIN_OUTBOUND_FLUSH

与 NOTIFY_BEGIN_INBOUND_FLUSH 标志类似,但指出站消息。 STATUS_OUTBOUND_FLUSH相应的状态标志。

NOTIFY_CANCEL_MESSAGE

MAPI 后台处理程序必须取消 lppvData 参数指向 IXPLogon::SubmitMessage 方法调用的 32 位值的消息的传输。 无需传输提供程序从与消息关联的 SubmitMessageIXPLogon::StartMessageIXPLogon::EndMessage 方法调用返回,即可设置NOTIFY_CANCEL_MESSAGE标志。 传输提供程序必须尽快从处理已取消消息的入口点返回。 对于当前正在处理的入站消息,传输提供程序应保存当前存储的传入消息,并在下一个方便的时间再次传递它。 已为传入消息存储的消息对象数据将被丢弃。 如果传输提供程序在 StartMessageSubmitMessage 时间未更新此 32 位值,则出站消息的值为 0,入站邮件的值为 1。

NOTIFY_END_INBOUND

必须停止此传输提供程序会话的入站操作。 MAPI 后台处理程序停止使用 Poll 方法,并忽略此会话的NOTIFY_NEWMAIL。 进程内消息应已完成。 在返回之前,应通过调用 ModifyStatusRow 来更新传输会话的状态表行。 NOTIFY_END_INBOUND和NOTIFY_BEGIN_INBOUND标志是相互排斥的。

NOTIFY_END_INBOUND_FLUSH

通知传输提供程序退出入站刷新模式。 传输提供程序不应停止下载,但下载应在后台完成。 当传输提供程序符合此通知时,应通过调用 ModifyStatusRow 来更新传输会话的状态表行。

NOTIFY_END_OUTBOUND

必须停止此传输提供程序会话的出站操作。 MAPI 后台处理程序停止调用 SubmitMessage 并忽略 SpoolerNotify NOTIFY_READYTOSEND 标志。 如果当前正在发送出站消息,则不应停止该消息;若要停止传递消息,请使用 NOTIFY_CANCEL_MESSAGE 标志。 在返回之前,应通过调用 ModifyStatusRow 来更新此会话的状态表行。 NOTIFY_END_INBOUND和NOTIFY_BEGIN_OUTBOUND标志互斥。

NOTIFY_END_OUTBOUND_FLUSH

与NOTIFY_END_INBOUND_FLUSH类似,但指出站消息。 STATUS_OUTBOUND_FLUSH相应的状态标志。

lppvData

[out]指向指向特定于事件的数据的指针的指针。 有关 lppvData 指定的内容的详细信息,请参阅 lpulFlags 参数的说明。

返回值

S_OK

调用成功并返回了一个或多个预期值。

备注

MAPI 后台处理程序调用 IXPLogon::TransportNotify 方法,向传输提供程序发出已请求通知的事件的信号。 这些事件包括用于取消消息传输的 MAPI 后台处理程序请求、入站或出站传输操作的开始或结束,以及清除入站或出站消息队列的操作的开始或结束。

当用户尝试取消传输提供程序之前已延迟的消息时,MAPI 后台处理程序会调用 TransportNotify,在 ulFlags 中传入NOTIFY_ABORT_DEFERRED和NOTIFY_CANCEL_MESSAGE标志。 如果 MAPI 后台处理程序正在注销,并且队列中仍有消息,则调用 TransportNotify 时,它仅在 ulFlags 中传递NOTIFY_ABORT_DEFERRED。

针对实现者的说明

提供程序必须在此调用中同步对其数据的访问,因为 MAPI 后台处理程序可以从另一个执行线程或其他窗口的过程调用此方法。 当 MAPI 后台处理程序发出取消传输提供程序已开始发送的消息的信号时,很可能会发生这种情况。

另请参阅