Comment ouvrir des fichiers .eml à l'aide d'Outlook MAPI en C #?
Question
J'ai une application C # qui lit les fichiers .msg et extrait le corps et les pièces jointes. Mais lorsque j'essaie de charger un fichier .eml, la demande se bloque. Je charge les fichiers comme ceci:
MailItem mailItem = (MailItem)outlookApp.CreateItemFromTemplate(msgFileName);
mailItem.SaveAs(fullFilename, OlSaveAsType.olHTML); // save body in html format
for(int i = 0; i < mailItem.Attachments.Count; i++)
mailItem.Attachments[i].SaveAsFile(filename); // save attachments
Cela fonctionne bien avec les fichiers .msg, mais cela ne fonctionne pas pour les fichiers .eml. Je ne comprends pas pourquoi les fichiers .EML ne fonctionnent pas, car je peux ouvrir des fichiers .eml dans Outlook 2010.
Comment puis-je charger des fichiers .eml à l'aide de l'Outlook Ensemble d'interopning primaire?
La solution
Essayez cet exemple de code Récupérer facilement les informations par e-mail à partir des fichiers .EML
Autres conseils
CreateItemFromTemplate
Fonctionne uniquement avec les fichiers MSG / OFT. Fot les fichiers EML dont vous aurez besoin pour analyser le fichier explicitement dans votre code ou utiliser une bibliothèque tierce (telle que le rachat):
Le code suivant créera un fichier MSG et importera un fichier EML à l'aide Rachat (Rdosession objet):
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = outlookApp.Session.MAPIOBJECT
set Msg = Session.CreateMessageFromMsgFile("C:\Temp\temp.msg")
Msg.Import "C:\Temp\test.eml", 1024
Msg.Save
MsgBox Msg.Subject
Vous pouvez ensuite utiliser le message (Radomail) pour y accéder diverses propriétés (sujet, corps, etc.)
Afin de créer un Mailitem à partir d'un fichier .EML, vous pouvez utiliser les deux étapes suivantes: Au début, vous ouvrez une instance Outlook Process, puis vous créez le Mailitem avec l'API Outlook.
string file = @"C:\TestEML\EmlMail.eml";
System.Diagnostics.Process.Start(file);
Outlook.Application POfficeApp = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application"); // note that it returns an exception if Outlook is not running
Outlook.MailItem POfficeItem = (Outlook.MailItem)POfficeApp.ActiveInspector().CurrentItem; // now pOfficeItem is the COM object that represents your .eml file
Bien que Outlook peut ouvrir des fichiers EML, il y a Aucun moyen de le faire programmatiquement Seulement avec VBA. J'ai donc créé cette macro VBA qui traverse un dossier et ouvre chaque fichier EML en utilisant Shell Exec. Cela peut prendre quelques millisecondes jusqu'à ce qu'Outlook ouvre le fichier EML, de sorte que le VBA attend que quelque chose soit ouvert dans ActiveInspector. Enfin, cet e-mail est copié dans un dossier choisi et (en cas de succès) le fichier EML d'origine est supprimé.
Voir ma réponse complète (et mon code) ici:https://stackoverflow.com/a/33761441/3606250