Управление сообщениями в 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_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 , он указывает, что хранилище сообщений не поддерживает доступ к сообщению в необработанном режиме. В этом случае повторите попытку метода 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