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?

Était-ce utile?

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

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