2017-06-07 3 views
0

Je programme essaie d'obtenir les données de pièce jointe en C# en suivant façon: -Comment accéder aux données de fixation par programme dans Outlook si l'attachement est lui-même un message

Microsoft.Office.Interop.Outlook.Attachment attachment = objMail.Attachments[attachmentIndex]; 

if (attachment.DisplayName.Equals("Test")) 

{ 

    const string PR_ATTACH_DATA = "http://schemas.microsoft.com/mapi/proptag/0x37010102"; 

    byte[] attachmentData = attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA); 

} 

Maintenant, mon code fonctionne bien si l'attachement est fichier texte ou fichier image. Mais si la pièce jointe est elle-même un mail, elle lève l'exception que la propriété est inconnue ou introuvable.

Veuillez indiquer dans quels cas/type de pièces jointes, cette propriété "http://schemas.microsoft.com/mapi/proptag/0x37010102" ne fonctionnera pas et dans ce cas, quelle serait la propriété/méthode alternative pour obtenir les données de pièce jointe dans un tableau d'octets?

Merci

Répondre

0

PR_ATTACH_DATA_BIN est présent uniquement pour les pièces jointes régulières par valeur (PR_ATTACH_METHOD == ATTACH_BY_VALUE). Les messages incorporés ou les pièces jointes OLE n'exposent pas cette propriété - ils utilisent PR_ATTACH_DATA_OBJ qui doit être ouvert en utilisant IAttach::OpenProperty(IID_IStorage, ...) - jetez un oeil aux messages existants en utilisant OutlookSpy (sélectionnez le message, cliquez sur le bouton IMessage, allez à l'onglet GetAttachmentTable, double-cliquez sur la pièce jointe) .

Gardez également à l'esprit que PropertyAccessor.GetProperty ne pourra récupérer cette propriété que pour les petites pièces jointes. Pour les pièces jointes volumineuses, PR_ATTACH_DATA_BIN doit être ouvert comme IStream en utilisant IAttach::OpenProperty(IID_IStorage, ...) - PropertyAccessor.GetProperty ne fait pas cela. Vous devrez utiliser MAPI étendu (C++ ou Delphi) ou Redemption (qui expose RDOAttachmentAsArray/AsText/propriétés AsStream

+0

Salut Dmitry, Merci pour la réponse que vous Pouvez s'il vous plaît me donner quelques exemples, comment puis-je appeler IAttach...: : OpenProperty de code C#? Ce serait une aide précieuse pour moi – user1677408

+0

Vous ne pouvez pas - comme je l'ai mentionné, MAPI étendu est C++ ou Delphi seulement. –