Gérer les messages dans OST sans appeler une synchronisation en mode Exchange mis en cache
S’applique à : Outlook 2013 | Outlook 2016
Cette rubrique contient un exemple de code en C++ qui montre comment utiliser IID_IMessageRaw
dans IMsgStore ::OpenEntry pour obtenir une interface IMessage qui gère un message dans un fichier de dossiers hors connexion (OST) sans forcer le téléchargement de l’ensemble du message lorsque le client est en mode Exchange mis en cache.
Lorsqu’un client est en mode Exchange mis en cache, les messages de l’OST peuvent être dans l’un des deux états suivants :
- Le message entier qui contient l’en-tête et le corps est téléchargé.
- Le message avec uniquement son en-tête est téléchargé.
Lorsque vous demandez une interface IMessage pour un message dans un OST et que le client est en mode Exchange mis en cache, utilisez IID_IMessageRaw
. Si vous utilisez IID_IMessage
pour demander une interface IMessage , et si le message a uniquement son en-tête téléchargé dans l’OST, vous appelez une synchronisation qui tente de télécharger l’intégralité du message.
Si vous utilisez IID_IMessageRaw
ou IID_IMessage
pour demander une interface IMessage , les interfaces retournées sont identiques en cours d’utilisation. L’interface IMessage demandée à l’aide IID_IMessageRaw
de renvoie un message électronique tel qu’il existe dans l’OST, et la synchronisation n’est pas forcée.
L’exemple suivant montre comment appeler la méthode OpenEntry , en passant IID_IMessageRaw
au lieu de 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;
}
Si la méthode OpenEntry retourne le code d’erreur MAPI_E_INTERFACE_NOT_SUPPORTED , cela indique que la banque de messages ne prend pas en charge l’accès au message en mode brut. Dans ce cas, réessayez la méthode OpenEntry en passant IID_IMessage
.
Importante
IID_IMessageRaw
peut ne pas être défini dans le fichier d’en-tête téléchargeable que vous avez actuellement. Dans ce cas, vous pouvez l’ajouter à votre code à l’aide de la définition suivante. Utilisez la macro DEFINE_OLEGUID définie dans le fichier d’en-tête microsoft Kit de développement logiciel Windows (Kit SDK Windows) (SDK) guiddef.h pour associer le nom symbolique GUID à sa valeur.
#if !defined(INITGUID) || defined(USES_IID_IMessageRaw)
DEFINE_OLEGUID(IID_IMessageRaw,0x0002038A, 0, 0);
> #endif