在不调用缓存 Exchange 模式下同步的情况下在 OST 中管理邮件

适用于:Outlook 2013 | Outlook 2016

本主题包含 C++ 中的代码示例,演示如何在 IID_IMessageRawIMsgStore::OpenEntry 中使用 IMessage 接口,该接口 (OST) 管理脱机文件夹文件中的邮件,而无需在客户端处于缓存 Exchange 模式时强制下载整个邮件。

当客户端处于缓存 Exchange 模式时,OST 中的消息可能处于以下两种状态之一:

  • 下载包含标头和正文的整个消息。
  • 下载仅具有其标头的消息。

在 OST 中请求 消息的 IMessage 接口并且客户端处于缓存 Exchange 模式时,请使用 IID_IMessageRaw。 如果使用 IID_IMessage 请求 IMessage 接口,并且消息在 OST 中仅下载了其标头,则调用尝试下载整个消息的同步。

如果使用 IID_IMessageRawIID_IMessage 请求 IMessage 接口,则返回的接口在使用中是相同的。 使用 IID_IMessageRaw 请求的 IMessage 接口会返回一封电子邮件,因为它存在于 OST 中,并且不会强制同步。

以下示例演示如何调用 OpenEntry 方法,而不是 IID_IMessageRawIID_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

另请参阅