Comment accéder à une pièce jointe d'un courrier électronique Outlook en C # sans l'enregistrer dans un nouvel emplacement?

StackOverflow https://stackoverflow.com/questions/1608507

Question

J'utilise Microsoft.Office.Interop.Outlook en C # pour accéder à une boîte aux lettres et rechercher des messages contenant des pièces jointes spécifiques. J'ai besoin d'interagir avec les pièces jointes.

Actuellement, j’enregistre le fichier dans un nouvel emplacement et y accède depuis cet emplacement. Ce processus de copie me ralentit. J'aimerais idéalement accéder au fichier où qu'il soit stocké en mémoire, mais le champ Outlook.Attachment.PathName renvoie la valeur null.

Les messages sont stockés sur un serveur Exchange.

Est-il possible d'y accéder directement ou dois-je continuer à enregistrer les fichiers?

Était-ce utile?

La solution

Outlook.Attachment.PathName implique un emplacement sur le disque. La pièce jointe est un fichier. si vous souhaitez interagir avec ce dernier, vous devez le traiter comme un fichier, ce qui signifie le sauvegarder sur le disque local.

L'objet Outlook.Attachment ne contient pas réellement le fichier joint; il contient un lien vers le fichier joint, avec certaines métadonnées associées.

Autres conseils

Je ne sais pas si cela est possible de quelque manière que ce soit via le modèle d'objet Outlook, mais MAPI vous le permet certainement.

Vous devez ouvrir les messages MAPIObject , un IMessage . À partir de là, utilisez IMessage :: OpenAttach () , qui retourne un IAttach .
La taille de la pièce jointe est stockée dans PR_ATTACH_SIZE , les données réelles dans PR_ATTACH_DATA_BIN .

Comme toujours, Rachat dispose probablement d'un moyen plus simple de le faire.

modifier:
L’accès via MAPI est ce que Outlook fait de toute façon en interne - il devrait être assez rapide, du moins lorsque vous utilisez le mode Exchange mis en cache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top