2010-06-26 5 views
4

Je suis en train de construire une application qui analyse les messages électroniques Outlook, stocke les informations analysées, et permet ensuite à l'utilisateur d'ouvrir des messages répondant à certains critères. Je m'attendais à extraire l'identificateur de message de chaque courrier électronique, à le stocker dans ma base de données, puis à demander à Outlook d'ouvrir un message en lui fournissant l'identificateur de message ultérieurement. Cependant, il semblerait que je manque quelque chose.Comment puis-je accéder à un message Outlook en utilisant un identifiant unique et stable?

Via les API d'interopérabilité Outlook, je peux obtenir un EntryID, mais pour autant que je sache, un EntryID est seulement garanti stable dans un dossier donné (ou peut-être un magasin donné). Si un message est déplacé vers un dossier différent, l'EntryID peut changer. En outre, les API requièrent que StoreID soit fourni lors de la recherche d'un message par EntryID. Encore une fois, si un message est déplacé entre les magasins, cette information sera vraisemblablement invalide.

J'ai vu beaucoup de produits liés à Office qui semblent faire quelque chose comme ce que j'ai décrit ci-dessus. Comment puis-je effectuer une recherche efficace d'un message accessible à Outlook, quels que soient les magasins, etc.? Actuellement, mon plan de sauvegarde consiste à stocker les informations EntryID et StoreID pour chaque ID de message que j'analyse, puis à essayer tous les différents combos EntryID/StoreID que j'ai enregistrés pour un MessageID donné jusqu'à ce que l'un soit réussi . Mais cela semble être un travail qu'Outlook devrait déjà savoir accomplir pour moi.

Merci,

-Patrick

Répondre

2

"Mais cela semble être le travail que Outlook doit déjà savoir comment accomplir pour moi"

Il devrait. Mais ce n'est pas le cas. Au moins, quand j'ai utilisé l'API, je n'en ai trouvé aucune. Peut-être que la raison est assez simple: Message-ID n'a aucun sens pour Outlook lui-même, donc l'enregistrer en tant que propriété n'a jamais été implémenté dans le produit. Maintenant, je pense que la façon la plus évidente est de faire ce que vous faites déjà, à savoir. stocker des associations entre Message-ID et StoreID - EntryID pair. Cela vous permettra d'accéder rapidement à l'e-mail souhaité sans parcourir la liste de tous les messages stockés. Maintenant, vous devez évidemment vérifier si le Message-ID est toujours correct, et si ce n'est pas le cas, faire une boucle sur chaque mail. Par ailleurs, je ne comprends pas bien pourquoi vous stockez plusieurs paires StoreID - EntryID pour chaque Message-ID. Je suppose que le courrier ne serait stocké qu'une seule fois dans Outlook, donc une paire par Message-ID est suffisante. Lorsque cette paire est obsolète (le courrier est déplacé vers un autre dossier/magasin), il vous suffit de le mettre à jour.

Remarque: ne serait-il pas plus facile et plus rapide d'accéder aux propriétés CreationTime et MailItem.SenderEmailAddress? Il serait étrange de voir deux mails différents partager ces propriétés, donc c'est en quelque sorte un moyen d'identifier de manière unique un mail, sans avoir à extraire manuellement le Message-ID.

+0

J'ai déjà d'autres besoins pour une base de données séparée, donc les détails de l'endroit où je stocke un mappage Message-ID => List est quelque peu arbitraire. En outre, les messages électroniques ont déjà un GUID - la valeur de leur en-tête Message-ID. Mon dilemme est que je ne vois aucun moyen évident de rechercher un objet Outlook MailItem avec un GUID. –

+0

Ok, je vois que j'ai mal compris votre question, alors ma réponse était complètement fausse. Je l'ai édité; J'espère que ça aide maintenant. –

+0

Je stocke plusieurs paires StoreId/EntryID en ce moment au cas où je manquerais un événement qui provoque le déplacement d'un message.Par exemple, si un message est déplacé dans une boîte aux lettres Exchange côté serveur, je m'attends à le récupérer au nouvel emplacement dans une nouvelle notification d'événement de message, mais je n'ai pas testé si oui ou non je recevrais une notification de d'où il a été déplacé. En outre, un message avec un ID donné peut être copié dans plusieurs boîtes aux lettres; ils sont toujours le même message (puisque les articles de courrier sont immuables par nature). –

Questions connexes