Как открыть файлы .eml, используя Outlook MAPI в C #? - PullRequest
6 голосов
/ 17 мая 2011

У меня есть приложение на C #, которое читает MSG-файлы и извлекает тело и вложения. Но когда я пытаюсь загрузить файл .eml, приложение вылетает. Я загружаю файлы так:

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

Это прекрасно работает с файлами .msg, но не работает с файлами .eml. Я не понимаю, почему файлы .eml не работают, потому что я могу открыть файлы .eml в Outlook 2010.

Как загрузить файлы .eml с помощью Outlook Основная сборка взаимодействия ?

Ответы [ 4 ]

8 голосов
/ 20 мая 2011
5 голосов
/ 19 мая 2011

CreateItemFromTemplate работает только с файлами MSG / OFT.Для файлов EML вам потребуется либо явный анализ файла в вашем коде, либо использование сторонней библиотеки (например, Redemption):

Следующий код создаст файл MSG и импортирует в него файл EML, используя Погашение ( RDOSession объект):

  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

Затем вы можете использовать сообщение ( RDOMail ) для доступа к различным свойствам (Тема,Кузов и пр.)

0 голосов
/ 17 ноября 2015

Хотя Outlook может открывать файлы EML , невозможно сделать программно только с VBA.Поэтому я создал этот макрос VBA, который проходит по какой-то папке и открывает каждый файл EML, используя SHELL EXEC .До того, как Outlook откроет файл EML, может пройти несколько миллисекунд, поэтому VBA ждет, пока что-то не будет открыто в ActiveInspector.Наконец, это письмо копируется в какую-то выбранную папку, и (в случае успеха) исходный файл EML удаляется.

См. Мой полный ответ (и код) здесь: https://stackoverflow.com/a/33761441/3606250

0 голосов
/ 29 мая 2015

Чтобы создать MailItem из файла .eml, вы можете использовать следующие два шага: сначала вы открываете экземпляр процесса Outlook, а затем создаете MailItem с помощью Outlook API.

  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
...