在不调用缓存 Exchange 模式下同步的情况下在 OST 中管理邮件
适用于:Outlook 2013 | Outlook 2016
本主题包含 C++ 中的代码示例,演示如何在 IID_IMessageRaw
IMsgStore::OpenEntry 中使用 IMessage 接口,该接口 (OST) 管理脱机文件夹文件中的邮件,而无需在客户端处于缓存 Exchange 模式时强制下载整个邮件。
当客户端处于缓存 Exchange 模式时,OST 中的消息可能处于以下两种状态之一:
- 下载包含标头和正文的整个消息。
- 下载仅具有其标头的消息。
在 OST 中请求 消息的 IMessage 接口并且客户端处于缓存 Exchange 模式时,请使用 IID_IMessageRaw
。 如果使用 IID_IMessage
请求 IMessage 接口,并且消息在 OST 中仅下载了其标头,则调用尝试下载整个消息的同步。
如果使用 IID_IMessageRaw
或 IID_IMessage
请求 IMessage 接口,则返回的接口在使用中是相同的。 使用 IID_IMessageRaw
请求的 IMessage 接口会返回一封电子邮件,因为它存在于 OST 中,并且不会强制同步。
以下示例演示如何调用 OpenEntry 方法,而不是 IID_IMessageRaw
IID_IMessage
传递 。
HRESULT HrOpenRawMessage (
LPMDB lpMSB,
ULONG cbEntryID,
LPENTRYID lpEntryID,
ULONG ulFlags,
LPMESSAGE* lpMessage)
{
ULONG ulObjType = NULL;
HRESULT hRes = lpMDB->OpenEntry(
cbEntryID,
lpEntryID,
IID_IMessageRaw,
ulFlags,
&ulObjType,
(LPUNKNOWN*) lpMessage));
return hRes;
}
如果 OpenEntry 方法返回 MAPI_E_INTERFACE_NOT_SUPPORTED 错误代码,则表示消息存储不支持在原始模式下访问消息。 在这种情况下,请通过传递 IID_IMessage
再次尝试 OpenEntry 方法。
重要
IID_IMessageRaw
可能未在当前具有的可下载头文件中定义。 在这种情况下,可以通过使用以下定义将其添加到代码中。 使用 Microsoft Windows 软件开发工具包 (Windows SDK) (SDK) 头文件 guiddef.h 中定义的 DEFINE_OLEGUID 宏将 GUID 符号名称与其值相关联。
#if !defined(INITGUID) || defined(USES_IID_IMessageRaw)
DEFINE_OLEGUID(IID_IMessageRaw,0x0002038A, 0, 0);
> #endif