Поделиться через


Управление сообщениями в OST без вызова синхронизации в режиме кэширования Exchange

Область применения: Outlook 2013 | Outlook 2016

В этом разделе содержится пример кода на C++, в котором показано, как использовать IID_IMessageRaw в IMsgStore::OpenEntry для получения интерфейса IMessage , который управляет сообщением в файле автономных папок (OST) без принудительной загрузки всего сообщения, когда клиент находится в режиме кэширования Exchange.

Если клиент находится в режиме кэширования Exchange, сообщения в OST могут находиться в одном из двух состояний:

  • Загружается все сообщение, содержащее заголовок и текст.
  • Скачивается сообщение только с заголовком.

При запросе интерфейса IMessage для сообщения в OST и клиент находится в режиме кэширования Exchange, используйте .IID_IMessageRaw Если вы используете IID_IMessage для запроса интерфейса IMessage и если сообщение скачивает только свой заголовок в OST, вызывается синхронизация, которая пытается скачать все сообщение.

Если вы используете IID_IMessageRaw интерфейс IMessage или IID_IMessage для запроса, возвращаемые интерфейсы будут одинаковыми. Интерфейс IMessage , запрошенный с помощью метода , IID_IMessageRaw возвращает сообщение электронной почты, существующее в 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 , он указывает, что хранилище сообщений не поддерживает доступ к сообщению в необработанном режиме. В этом случае повторите попытку метода OpenEntry, передав .IID_IMessage

Важно!

IID_IMessageRaw может не быть определено в загружаемом файле заголовка, который у вас есть в данный момент. В этом случае его можно добавить в код с помощью следующего определения. Используйте макрос DEFINE_OLEGUID, определенный в файле заголовка Microsoft пакет средств разработки программного обеспечения для Windows (SDK) guiddef.h, чтобы связать символьное имя GUID со значением. #if !defined(INITGUID) || defined(USES_IID_IMessageRaw) DEFINE_OLEGUID(IID_IMessageRaw,0x0002038A, 0, 0);> #endif

См. также