IMAPISupport::SpoolerNotify

适用于:Outlook 2013 | Outlook 2016

通知 MAPI 后台处理程序状态更改或服务请求。

HRESULT SpoolerNotify(
ULONG ulFlags,
LPVOID lpvData
);

参数

ulFlags

[in]指示通知类型的标志的位掩码。 传输提供程序可以设置除NOTIFY_NEWMAIL_RECEIVED以外的所有标志;只有NOTIFY_NEWMAIL_RECEIVED和NOTIFY_READTOSEND对消息存储提供程序有效。 以下标志对 ulFlags 参数有效:

NOTIFY_CONFIG_CHANGE

注册更改传输提供程序配置的请求。

NOTIFY_CRITICAL_ERROR

传输提供程序出现不可恢复的错误。 由于 NOTIFY_SENTDEFERRED 和 NOTIFY_CRITICAL_ERROR都对传输提供程序调用使用 lpvData 参数,因此这些标志是相互排斥的。

NOTIFY_CRITSEC

请求传输提供程序的关键部分。 lpvData 参数未定义,应为 NULL。

NOTIFY_NEWMAIL

MAPI 后台处理程序应在下一个可用时间下载任何新接收的消息。 lpvData 参数未定义,应设置为 NULL。

NOTIFY_NEWMAIL_RECEIVED

消息存储中已收到新消息。 lpvData 参数指向描述消息的 NEWMAIL_NOTIFICATION 结构。 此标志用于与传输提供程序紧密耦合的消息存储提供程序,如果存储提供程序使用MAPI_NO_MAIL标志集登录,则忽略此标志。

NOTIFY_NONCRIT

释放通过上一次调用 SpoolerNotify 获取的关键节,将 ulFlags 设置为 NOTIFY_CRITSEC。 lpvData 参数未定义,应设置为 NULL。

NOTIFY_READYTOSEND

传输或消息存储提供程序已准备好发送消息。 lpvData 参数未定义,应设置为 NULL。

NOTIFY_SENTDEFERRED

现在应发送以前延迟的消息,并且当消息准备好传递时,应使用调用 IXPLogon::SubmitMessage 方法通知传输提供程序。 延迟消息的条目标识符包含在 lpvData 指向的 SBinary 结构中。 由于 NOTIFY_SENTDEFERRED 和 NOTIFY_CRITICAL_ERROR都使用 lpvData 参数,因此这些标志是相互排斥的。

lpvData

[in]指向适用于通知的关联数据的指针。 仅当将以下标志设置为 (lpvData 为 NULL 时, lpvData 参数才会指向有效数据,而 ulFlags 设置为其他通知类型) :

ulFlags 设置 lpvData
NOTIFY_CRITICAL_ERROR
有关错误的信息。
NOTIFY_NEWMAIL_RECEIVED
包含有关新传递的消息信息的 NEWMAIL_NOTIFICATION 结构。
NOTIFY_SENTDEFERRED
包含延迟消息的条目标识符的 SBinary 结构。

返回值

S_OK

通知成功。

备注

IMAPISupport::SpoolerNotify 方法为消息存储和传输提供程序支持对象实现。 这些提供程序调用 SpoolerNotify 以通知 MAPI 后台处理程序状态更改或服务请求。 SpoolerNotify 主要由传输提供程序调用,可以在会话期间随时调用。

传输提供程序说明

如果已更改传输提供程序配置,请调用 SpoolerNotify 并将 ulFlags 设置为 NOTIFY_CONFIG_CHANGED。 SpoolerNotify 通过调用 IXPLogon::AddressTypes 方法进行响应,以查询支持的地址类型的更改。

如果需要关键部分以确保处理不中断,请调用 SpoolerNotify ,将 ulFlags 设置为 NOTIFY_CRITSEC。 设置此标志会通知 MAPI 后台处理程序不应调用 IXPLogon::IdleIXPLogon::P oll 方法。 打开关键节时,每当调用 IMAPIStatus::ValidateState 方法时,返回MAPI_E_BUSY。 完成关键部分后,再次调用 SpoolerNotify with_ulFlags_设置为 NOTIFY_NONCRIT。

例如,如果远程传输提供程序正在上传消息,则可能需要允许用户输入电话号码来建立远程连接。 在循环访问对话框过程之前,应声明关键节。 当用户关闭对话框并终止对话框过程时,应释放关键部分。

ulFlags 设置为 NOTIFY_CRITICAL_ERROR 时,MAPI 后台处理程序除了释放提供程序外,不会对提供程序进行进一步调用。 如果使用从 IXPLogon::StartMessage 或 IXPLogon::SubmitMessage 方法设置NOTIFY_CRITICAL_ERROR调用 SpoolerNotify,请在 SpoolerNotify 调用后立即从 StartMessageSubmitMessage 调用返回相应的错误值。

如果传输提供程序从以前导致其失败的条件中恢复,请调用 SpoolerNotify ,将 ulFlags 设置为 NOTIFY_READYTOSEND。 此标志指示提供程序再次准备好处理消息。

消息存储提供程序说明

在首次调用 IMessage::SubmitMessage 中的 IMAPISupport::P repareSubmit 之前,调用 SpoolerNotify,在 ulFlags 中传递NOTIFY_READYTOSEND标志。 每个会话只需对 SpoolerNotify 进行一次调用。

如果消息存储提供程序与传输提供程序紧密耦合,并且调用 spoolerNotifyulFlags 设置为 NOTIFY_NEWMAIL_RECEIVED,则 MAPI 后台处理程序将打开新消息并开始处理新的消息挂钩函数。 处理完成后,MAPI 后台处理程序会调用 IMsgStore::NotifyNewMail 方法,以通知你自己的新邮件。

有关调用 SpoolerNotify 的详细信息,请参阅以下任何主题:

另请参阅

IMsgStore::NotifyNewMail
IXPLogon::StartMessage
IXPLogon::SubmitMessage
IMAPISupport : IUnknown