Partager via


Identification de l’historique de téléchargement de message pour un compte POP3

Cette rubrique décrit comment un client de messagerie peut accéder à la propriété PidTagAttachDataBinary pour obtenir l’historique de téléchargement des messages pour un compte POP3.

Pourquoi obtenir l’historique de téléchargement des messages ?

Le fournisseur POP (Post Office Protocol) pour Outlook permet aux utilisateurs de récupérer et de télécharger de nouveaux messages électroniques sur leur appareil local, puis de laisser ou de supprimer ces messages sur le serveur de messagerie. Lorsque le client de messagerie recherche les nouveaux messages à télécharger, il doit être en mesure d’identifier et de télécharger uniquement les nouveaux messages pour cette boîte de réception. Pour ce faire, le client de messagerie utilise d’abord la commande UIDL (Liste d’ID unique), qui obtient un mappage de chaque message qui a été remis à cette boîte de réception à un identificateur unique (UID). Le client obtient également l’historique de téléchargement des messages pour les messages qui ont été téléchargés ou supprimés pour la boîte de réception sur ce client. À l’aide de la carte UID des messages et de l’historique de téléchargement, le client peut ensuite identifier les messages absents dans l’historique comme nouveaux et, par conséquent, doivent être téléchargés.

Pour obtenir l’historique de téléchargement des messages pour une boîte de réception :

  • Suivez les étapes décrites dans cette rubrique pour rechercher la propriété PidTagAttachDataBinary , qui contient l’historique dans un objet blob (Binary Large Object) qui suit un format spécifique.

  • Poursuivez l’analyse de l’historique de téléchargement des messages pour un compte POP3, qui décrit comment analyser cet objet BLOB afin d’identifier les messages qui ont été téléchargés ou supprimés pour cette boîte de réception.

Concepts de base à connaître pour localiser l’historique de téléchargement des messages

L’historique de téléchargement des messages d’une boîte de réception est stocké dans une propriété MAPI binaire, PidTagAttachDataBinary, sur une pièce jointe d’un message masqué dans la boîte de réception. Le tableau 1 présente des ressources pour les concepts qui vous aident à comprendre comment localiser l’historique de téléchargement des messages.

Tableau 1. Concepts de base

Titre d’article Description
Dossiers masqués MAPI
MAPI permet aux clients de messagerie de stocker des informations dans des dossiers masqués et des messages masqués. Les dossiers masqués se trouvent dans la partie associée des dossiers MAPI et contiennent généralement des informations qui ne sont pas visibles et qui ne doivent pas être manipulées par les utilisateurs. Les clients décident du format et du contenu à stocker dans les messages masqués dans des dossiers masqués.
MAPI Messages
MAPI stocke les messages dans des dossiers, soit dans la sous-arborescence IPM standard visible par les utilisateurs d’un client, soit en dehors de la sous-arborescence et invisible pour les utilisateurs. Les messages peuvent avoir des données supplémentaires stockées dans une pièce jointe, qui peut être sous la forme d’un fichier, d’un autre message ou d’un objet OLE. Dans le cas de l’historique de téléchargement du message, l’historique est stocké dans une propriété d’un message joint à un autre message masqué.
Vue d’ensemble des propriétés de message
Lorsqu’un client stocke des informations dans un message, il stocke en fait les informations dans une propriété du message. MAPI prend en charge de nombreuses propriétés ( certaines existent toujours et peuvent être définies par des clients, d’autres sont facultatives) et les clients ne peuvent pas s’attendre à ce qu’elles soient disponibles ou définies sur des valeurs valides. L’historique de téléchargement des messages est stocké dans la propriété PidTagAttachDataBinary d’une pièce jointe à un message masqué.
Profils MAPI
Au moment de la connexion dans une session, le client de messagerie sélectionne un profil qui décrit les fournisseurs et les services à utiliser. Un profil est divisé en sections qui contiennent des propriétés. En particulier, les propriétés PidTagSearchKey (PR_SEARCH_KEY) et PidTagProfileName (PR_PROFILE_NAME) existent toujours. La clé de recherche d’un profil est unique parmi tous les profils et est stockée dans la section de profil identifiée par MUID_PROFILE_INSTANCE (définie dans MAPIGUID). H). Utilisez IMAPISession ::OpenProfileSection pour ouvrir la section et utilisez IMAPIProp ::GetProps pour obtenir les valeurs de propriété.
Tables de contenu
Les fournisseurs de magasins de messages implémentent des tables de contenu pour leurs dossiers. Pour les messages masqués dans la partie associée d’un dossier, les fournisseurs de magasins de messages prennent en charge les tables de contenu associées, et les clients peuvent utiliser la méthode IMAPIContainer ::GetContentsTable pour renvoyer un pointeur vers la table de contenu associée.
À propos des restrictions
Types de restrictions
Génération d’une restriction
Exemple de code de restriction
Dans MAPI, les clients peuvent utiliser des restrictions pour filtrer les tables de contenu et rechercher des lignes qui représentent des messages dont une certaine propriété est définie sur une valeur spécifique. Les restrictions sont définies à l’aide de la structure de données SRestriction , qui peut contenir une union de structures de restriction plus spécialisées. La méthode IMAPITable ::FindRow applique une restriction et récupère la première ligne d’une table qui correspond aux critères de restriction.
À propos de l’inscription de magasins pour l’indexation
Utilisez la propriété PidTagStoreProvider (PR_MDB_PROVIDER) pour vérifier le type de fournisseur de magasin. Par exemple, pour vérifier si une banque est une banque Exchange, la propriété PidTagStoreProvider doit retourner une valeur représentée par la constante pbExchangeProviderPrimaryUserGuid, qui est définie dans le fichier d’en-tête public edkmdb.h.

Localisation du message masqué et de la pièce jointe appropriés

Maintenant que nous savons que l’historique de téléchargement des messages pour une boîte de réception se trouve dans la propriété PidTagAttachDataBinary d’une pièce jointe à un message masqué, la procédure permettant de localiser la pièce jointe appropriée du message masqué approprié implique les procédures suivantes :

  1. Rechercher le message masqué approprié

  2. Rechercher la pièce jointe appropriée du message masqué

  3. Accéder à la propriété PidTagAttachDataBinary de la pièce jointe du message

Rechercher le message masqué approprié

  1. Obtenez la propriété PidTagSearchKey (PR_SEARCH_KEY) à partir du profil, dans la section de profil spécifiée par MUID_PROFILE_INSTANCE.

  2. Ouvrez le contenu associé pour le dossier Boîte de réception en appelant IMAPIContainer ::GetContentsTable.

  3. Créez une restriction basée sur les propriétés PidTagConversationKey (PR_CONVERSATION_KEY), PidTagSearchKey (PR_SEARCH_KEY) et PidTagMessageClass (PR_MESSAGE_CLASS) pour obtenir une table qui contient tous les messages masqués dans le contenu associé de la boîte de réception. Voici un exemple de restriction extraite de Localisation de l’historique UIDL POP3.

       SRestriction rgRes[3]; 
       SPropValue rgProps[3]; 
       rgRes[0].rt = RES_AND; 
       rgRes[0].res.resAnd.cRes = 2; 
       rgRes[0].res.resAnd.lpRes = &rgRes[1]; 
       rgRes[1].rt = RES_PROPERTY; 
       rgRes[1].res.resProperty.relop = RELOP_EQ; 
       rgRes[1].res.resProperty.ulPropTag = PR_CONVERSATION_KEY; 
       rgRes[1].res.resProperty.lpProp = &rgProps[0]; 
       rgRes[2].rt = RES_PROPERTY; 
       rgRes[2].res.resProperty.relop = RELOP_EQ; 
       rgRes[2].res.resProperty.ulPropTag = PR_MESSAGE_CLASS; 
       rgRes[2].res.resProperty.lpProp = &rgProps[1]; 
       rgProps[0].ulPropTag = PR_CONVERSATION_KEY; 
       rgProps[0].Value.bin = pVals[iSearchKey].Value.bin; // PR_SEARCH_KEY from the profile 
       rgProps[1].ulPropTag = PR_MESSAGE_CLASS; 
       rgProps[1].Value.LPSZ = (LPTSTR)"IPM.MessageManager";
    
  4. Dans le tableau, recherchez le message masqué à l’aide de IMAPITable ::FindRow.

  5. Si l’étape 4 ne parvient pas à trouver un message masqué, modifiez la restriction pour utiliser PidTagSearchKey (PR_SEARCH_KEY) au lieu de PidTagConversationKey, comme indiqué ci-dessous :

     rgRes[1].res.resProperty.ulPropTag = rgProps[0].ulPropTag = PR_SEARCH_KEY;
    
  6. Recherchez le message masqué à l’aide de IMAPITable ::FindRow.

  7. Si l’étape 6 échoue, modifiez la restriction pour utiliser PidTagSubject (PR_SUBJECT) en étant égal à la valeur suivante (illustrée ci-dessous à l’aide printf de la substitution de style par souci de concision).

     "Outlook Message Manager (%s) (KEY: %s)", PR_PROFILE_NAME, HexFromBin(PR_SEARCH_KEY)
    
  8. Recherchez le message masqué à l’aide de IMAPITable ::FindRow.

  9. Si vous exécutez Outlook 2010 ou une version ultérieure, utilisez les valeurs suivantes pour PidTagProfileName (PR_PROFILE_NAME) et PidTagSearchKey (PR_SEARCH_KEY), respectivement.

     CHAR g_szGeneralKey[] = "General Key"; 
     const SBinary g_binGeneralKey = {sizeof(g_szGeneralKey), (LPBYTE)g_szGeneralKey};
    

    Exécutez les étapes 3 à 8. Si vous ne trouvez pas un message, revenez aux étapes d’origine 3 à 8.

  10. Ouvrez le message masqué trouvé à l’étape 4, 6 ou 8.

Rechercher la pièce jointe appropriée du message masqué

Étant donné que le message masqué peut contenir plusieurs pièces jointes, recherchez la pièce jointe appropriée dans l’ordre suivant.

Remarque

Cette procédure utilise à nouveau la substitution de printf style pour la concision.

  1. Recherchez une pièce jointe dont PidTagAttachLongFilename (PR_ATTACH_LONG_FILENAME) correspond à la chaîne suivante, où szEmailAddress est l’adresse SMTP de l’utilisateur, comme spécifié dans le profil de l’utilisateur. .

     "BlobPOP%s", szEmailAddress
    
  2. Recherchez une pièce jointe dont PidTagAttachFilename (PR_ATTACH_FILENAME) correspond à « BlobPOP%s », szEmailAddress.

  3. Recherchez une pièce jointe dont PidTagDisplayName (PR_DISPLAY_NAME) correspond à « BlobPOP%s », szEmailAddress.

  4. Recherchez une pièce jointe dont PidTagAttachFilename (PR_ATTACH_FILENAME) correspond à « Blob%.8x », dwAcctUID, d’où dwAcctUID provient PROP_ACCT_MINI_UID. Vous pouvez utiliser la méthode IOlkAccount ::GetProp pour accéder à la propriété PROP_ACCT_MINI_UID .

Accéder à la propriété PidTagAttachDataBinary de la pièce jointe du message

Après avoir localisé la pièce jointe appropriée du message masqué, utilisez IMAPIProp ::GetProps pour lire la propriété PidTagAttachDataBinary de la pièce jointe.

Prochaines étapes

Cette rubrique vous a appris à localiser l’historique de téléchargement des messages pour la boîte de réception d’un client de messagerie POP3. Consultez Analyse de l’historique de téléchargement des messages pour un compte POP3 pour savoir comment analyser cet historique afin d’identifier les messages qui ont été téléchargés ou supprimés pour la boîte de réception.

Voir aussi