Подтвердить что ты не робот

Рекомендации по разбору файлов .eml в С#

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

4b9b3361

Ответ 1

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

Ответ 2

LumiSoft включает в себя Mime parser.

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

Ответ 3

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

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

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

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

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

    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;
    }
    
  • Вызовите этот метод, передав полный путь к вашему файлу eml, и объект CDO.Message, который он возвращает, будет иметь всю анализируемую информацию, в которой вы нуждаетесь, включая To, From, Subject, Body.

Ответ 4

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

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

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

Ответ 5

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

Я работал над этим примерно в том же время, в течение которого я работал над классом-оболочкой для файлов MSG. Большая разница в трудность. Где EML-обертка класс может занять день, чтобы прочитать spec и получить право, оболочка 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");

Ответ 6

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

Ответ 7

Try:

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

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

Обходные:

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

Ответ 8

Aspose.Email для .NET

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

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

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

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