2017-10-07 39 views
0

J'essaie de faire une conversion de fichiers .msg en .txt. J'ai deux questions.Conversion de fichiers .MSG en .TXT; Dois-je utiliser Microsoft.Interop Outlook?

1) J'ai étudié et trouvé le package Microsoft.Interop Outlook et il existe un moyen d'extraire le corpsHTML, la date d'envoi, et quelques autres propriétés, mais j'ai l'impression que c'est un processus manuel parce que je dois couper toutes les balises HTML tels que < br>, & nbsp, a href etc ...

Voici mon code actuel ...

MailItem mailItem = outlookApp.Session.OpenSharedItem(item) as MailItem; 
TextFile textFile = new TextFile(); //collection of properties I am interested in 
textFile.To = mailItem.To; 
textFile.Subject = mailItem.Subject; 
textFile.Sent = mailItem.SentOn.ToString(); 
textFile.Name = Path.GetFileNameWithoutExtension(item); 
var atttach = mailItem.Attachments; //Really just want the names 
textFile.Body = RemoveStuff(mailItem.HTMLBody); //manually removing all html tags 
textFiles.Add(textFile); 
Marshal.ReleaseComObject(mailItem); 

est-ce que quelqu'un sait si il y a un moyen plus efficace de le faire en C# ou d'utiliser Interop dont je ne suis pas au courant?

2) Si je vais sur la route Interop, existe-t-il un moyen de contourner la fenêtre contextuelle dans Outlook demandant si je peux autoriser l'accès à Outlook? Semble inefficace si mon but est de créer un convertisseur.

Toute aide est grandement appréciée.

Merci!

Répondre

1

Premièrement, pourquoi utilisez-vous la propriété HTMLBody à la place du texte brut Body? Deuxièmement, vous pouvez utiliser MailItem.saveAs (..., olTxt) pour enregistrer le message en tant que fichier texte. Ou voulez-vous dire quelque chose d'autre par fichier txt?

L'invite de sécurité est déclenchée par Outlook si votre application antivirus n'est pas à jour. Si vous ne pouvez pas contrôler l'environnement dans lequel s'exécute votre code, Extended MAPi (C++ ou Delphi uniquement) ou un wrapper comme Redemption (n'importe quelle langue) sont à peu près votre seule option. Voir http://www.outlookcode.com/article.aspx?id=52 pour plus de détails.

En Redemption, vous pouvez avoir quelque chose comme ce qui suit:

using Redemption; 
... 
RDOSession session = new RDOSession(); 
RDOMail msg = session.GetMessageFromMsgFile(TheFileName); 
msg.SaveAs(TxtFileName, rdoSaveAsType.olTXT); 
+0

Wow merci beaucoup, c'est exactement ce que je devais faire, ce qui sauvait comme un texte. (Je n'étais pas au courant des sauvegardes et c'est pourquoi j'utilisais le HTMLBody et analysais manuellement toutes les balises html et les entités). La seule chose est maintenant qu'il ne capture pas les propriétés mailItem.To. J'ai entendu parler de Redemption, mais je ne serai pas en mesure de l'utiliser en raison de licences. Merci encore!!! – bird

+0

Voulez-vous dire que le format txt ne sauvegarde pas les en-têtes To/CC? Ou que les adresses e-mail ne sont pas incluses? –

+0

Les deux, si je tape dans mailItem.To c'est nul, mais dans mon .MSG il y a clairement Destinataires. Depuis sa null, il n'y a rien d'enregistré sur le fichier texte. – bird