Рекомендации по parsingу файлов .eml в C #

У меня есть каталог .eml-файлов, содержащих сообщения электронной почты. Есть ли рекомендуемый подход в C # для анализа файлов этого типа?

    Я опубликовал образец проекта, чтобы проиллюстрировать этот ответ на Github

    CDO COM DLL является частью Windows / IIS и может быть указана в .net. Он обеспечит точный синтаксический анализ и хорошую объектную модель. Используйте его в сочетании со ссылкой на ADODB.DLL.

    public CDO.Message LoadEmlFromFile(String emlFileName) { CDO.Message msg = new CDO.MessageClass(); ADODB.Stream stream = new ADODB.StreamClass(); stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty); stream.LoadFromFile(emlFileName); stream.Flush(); msg.DataSource.OpenObject(stream, "_Stream"); msg.DataSource.Save(); stream.Close(); return msg; } 

    – Добавлено августа 2017 года. Также проверьте MimeKit: https://github.com/jstedfast/MimeKit . Он поддерживает .Netstandard, поэтому будет работать межплатформенная платформа.

    LumiSoft включает парсер Mime .

    Sasa также включает парсер Mime.

    Следуйте этой ссылке для хорошего решения:

    Резюме статьи – 4 шага (второй шаг ниже отсутствует в статье, но необходим):

    1. Добавьте ссылку на «Microsoft CDO для библиотеки Windows 2000», которую можно найти на вкладке «COM» в диалоговом окне «Добавить ссылку» Visual Studio. Это добавит 2 ссылки на «ADODB» и «CDO» в вашем проекте.

    2. Отключить вложение типов Interop для 2-х ссылок «ADODB» и «CDO». (Ссылки -> ADODB -> Свойства -> Установить «Вставить типы взаимодействия» в False и повторить одно и то же для CDO)

    3. Добавьте следующий код в свой код:

       protected CDO.Message ReadMessage(String emlFileName) { CDO.Message msg = new CDO.MessageClass(); ADODB.Stream stream = new ADODB.StreamClass(); stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty); stream.LoadFromFile(emlFileName); stream.Flush(); msg.DataSource.OpenObject(stream, "_Stream"); msg.DataSource.Save(); return msg; } 
    4. Вызовите этот метод, передав полный путь к вашему файлу eml, и объект CDO.Message, который он возвращает, будет иметь всю анализируемую информацию, в которой вы нуждаетесь, включая To, From, Subject, Body.

    Получение достойного анализатора MIME было бы, вероятно, способом. Вы можете попытаться использовать бесплатный MIME-парсер (например, этот код из codeproject), но комментарии от автора кода похожи на это

    Я работал над этим примерно в то же время, когда работал над classом-оболочкой для файлов MSG. Большая разница в сложности. Если class оболочки EML, возможно, занял целый день, чтобы прочитать спецификацию и получить право , class оболочки MSG занял неделю.

    мне было интересно узнать о качестве кода. Я уверен, что вы можете взломать синтаксический анализатор, который анализирует 95% сообщений электронной почты в течение нескольких дней / часов. Я также уверен, что правильные оставшиеся 5% займут месяцы. Рассмотрите возможность обработки S / MIME (зашифрованных и подписанных писем), unicode, неправильных электронных писем, вызванных неправильной работой почтовых клиентов и серверов, нескольких схем кодирования, проблем интернационализации, следя за тем, чтобы намеренно настроенные электронные письма не разбивали ваше приложение и т. Д.

    Если вам нужно разобраться с электронной почтой, исходящей из одного источника, может потребоваться быстрый и грязный парсер. Если вам нужно разобрать электронные письма из дикой местности, может понадобиться лучшее решение.

    Я бы рекомендовал наш компонент Rebex Secure Mail , но я уверен, что вы получите достойный результат с компонентами других поставщиков.

    Убедившись, что анализатор по вашему выбору работает правильно на печально известном «Образце примера пыток», подготовленном Майком Криспином (соавтором MIME и IMAP RFC). Сообщение тестирования отображается в образце MIME Explorer и может быть загружено в установочный пакет.

    Следующий код показывает, как читать и анализировать файл EML:

     using Rebex.Mail; MailMessage message = new MailMessage(); message.Load("file.eml"); 

    Возможно, вам нужен парсер электронной почты / MIME. Разбор всех полей заголовка не очень сложно, но разделение различных типов MIME, таких как изображения, вложения, различные текстовые и html-части и т. Д., Может стать очень сложным.

    Мы используем сторонний инструмент, но есть много инструментов / библиотек C #. Поиск бесплатного парсера MIME в C # в Google. Как я получил это:

    http://www.codeproject.com/Articles/11882/Advanced-MIME-Parser-Creator-Editor http://www.lumisoft.ee/lswww/download/downloads/Net/info.txt

    Я просто начал использовать Mime-часть Papercut для этого. Кажется, это на первый взгляд кажется простым и простым.

      public void ProcessRawContents(string raw) { // NB: empty lines may be relevant for interpretation and for content !! var lRawLines = raw.Split(new []{"\r\n"}, StringSplitOptions.None); var lMailReader = new MimeReader(lRawLines); var lMimeEntity = lMailReader.CreateMimeEntity(); MailMessageEx Email = lMimeEntity.ToMailMessageEx(); // ... } 

    ( MailMessageEx , конечно, получен из MailMessage .)

    Пытаться:

    • febootimail
    • SmtpExpress
    • Информационный бюллетень LinkWS Turbo
    • emlBridge – импорт eml-файлов в Outlook и практически любой другой почтовый клиент
    • Информационный бюллетень 2.1 Turbo
    • ThunderStor (emlResender)
    • Ruby (с использованием eml2mbox ). См. Метод jimbob .
    • Evolution – создать новое сообщение, прикрепить файл eml,

    Напишите программу:

    • в C # (см. [this] [4] и это ). См. Исходный код .
    • использование библиотеки Rebel Secure Mail
    • .NET (см. Это , это и это )

    обходные:

    • $ cat mail.eml | mail -s -c Но заголовки не обрабатываются, ни вложения.
    • поместите их в свой GMail (Firefox сохранит их как вложения)

    Aspose.Email для .NET

    Aspose.Email для .NET – это набор компонентов для работы с электронной почтой из ваших приложений .NET. Это упрощает работу с несколькими форматами сообщений электронной почты и файлами хранения сообщений (PST / OST), а также возможностями отправки и получения сообщений.

    Aspose.Email упрощает создание, чтение и обработку нескольких форматов сообщений, таких как файлы MSG, EML , EMLX и MHT без необходимости установки Microsoft Outlook . Вы можете не только изменять содержимое сообщения, но и манипулировать (добавлять, извлекать и удалять) вложения из объекта сообщения. Вы можете настроить заголовки сообщений, добавив или удалив получателей, изменив тему или другие свойства. Он также дает вам полный контроль над электронным сообщением, предоставляя доступ к его свойствам Mapi.

    C # Outlook MSG для чтения файлов без необходимости в Outlook

    MSGReader – это библиотека C # .NET 4.0 для чтения файлов Outlook MSG и EML (Mime 1.0). Поддерживаются почти все общие объекты в Outlook.

    Давайте будем гением компьютера.