Рекомендации по разбору файлов .eml в C # - PullRequest
42 голосов
/ 01 июня 2009

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

Ответы [ 8 ]

62 голосов
/ 24 июля 2010

Я опубликовал пример проекта, чтобы проиллюстрировать этот ответ на 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, поэтому будет работать кроссплатформенно.

11 голосов
/ 15 мая 2010

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

Sasa также включает в себя анализатор Mime.

9 голосов
/ 26 сентября 2013

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

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

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

  2. Отключить встраивание типов Interop для 2-х справочных «ADODB» и «CDO». (Справочные материалы -> ADODB -> Свойства -> Установите для параметра «Типы встроенных взаимодействий» значение «Ложь» и повторите то же самое для 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.

4 голосов
/ 27 января 2010

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

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

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

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

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

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

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

using Rebex.Mail;

MailMessage message = new MailMessage();
message.Load("file.eml");
4 голосов
/ 01 июня 2009

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

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

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

3 голосов
/ 31 мая 2013

Я только начал использовать 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.)

2 голосов
/ 09 апреля 2015

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.

2 голосов
/ 13 декабря 2010

Попробуйте:

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

Написать программу:

Обходные:

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