Можно ли читать файлы .eml в .net? - PullRequest
4 голосов
/ 20 июля 2009

Я хотел бы знать, можно ли анализировать файлы .eml и .msg в точечной сети (предпочтительно из потока памяти), чтобы я мог использовать их на странице ASP.Net.

Ответы [ 3 ]

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

EML (сообщения MIME)

EML - это в большинстве случаев MIME-файлы с почтовыми сообщениями. К общим источникам файлов EML относятся сообщения, сохраненные из Outlook Express или Thunderbird, сообщения, загруженные с серверов IMAP или POP3.

Правильная загрузка EML-файла не так проста, как кажется. Вы можете написать реализацию, работающую в 95% случаев в течение нескольких дней. Оставшиеся 5% займут как минимум несколько месяцев ;-). Я знаю, потому что я занимался его разработкой.

Рассмотрим следующие трудности:

  • электронные письма в юникоде
  • справа налево
  • исправление искаженных файлов EML, вызванных известными ошибками в популярных почтовых клиентах и ​​серверах
  • работа с S / MIME (зашифрованные и подписанные почтовые сообщения)
  • правильно работает с несколькими методами кодирования вложений
  • работа с встроенными изображениями и таблицами стилей, встроенными в электронные письма в формате HTML
  • убедившись, что он правильно анализирует сообщение о пытке MIME от Майка Криспина (соавтора RFC Mime и IMAP)
  • убедившись, что искаженное сообщение не приведет к переполнению буфера или другому отказу приложения
  • обработка иерархических сообщений (сообщение с прикрепленными сообщениями)
  • убедившись, что он правильно обрабатывает очень большие письма

Созревание такого парсера занимает годы и постоянную обратную связь для его пользователей. В данный момент в .NET Framework нет такого парсера. Пока это не изменится, я бы предложил получить сторонний MIME-парсер от известного поставщика.

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

Код основан на Учебник по почтовому сообщению .

// create an instance of MailMessage 
MailMessage message = new MailMessage();

// load the message from a local disk file 
message.Load("c:\\message.eml");

// load the message from MemoryStream
MemoryStream stream = new MemoryStream(); 
// TODO: fill the stream, seek to the beginning
message.Load(stream);

MSG (сообщения Outlook)

Формат MSG - это формат сообщений электронной почты, введенный Microsoft в Microsoft Outlook. На сайте Microsoft имеется спецификация формата MSG. Вы также можете попробовать сторонний компонент. Мне известен один компонент формата MSG от IndependentSoft , но я не пробовал его лично. Также наша Rebex Secure Mail версия 1.0.4060.0 или более поздняя также поддерживает формат MSG.

5 голосов
/ 20 июля 2009

Да, вы можете. Это просто обычные текстовые файлы, ничего особенного.

Вот как выглядит файл eml внутри

X-Sender: somewhere@google.com
X-Receiver: somewhere@google.com
MIME-Version: 1.0
From: somewhere@google.com
To: somewhere@google.com
Date: 7 Jun 2009 18:58:01 -0400
Subject: From someone you know
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

This is the body
2 голосов
/ 20 ноября 2010

ИСПОЛЬЗОВАТЬ CDOSYS.DLL для EML-файлов

Вы можете сделать это «правильно» (конечно, лучше, чем пытаться разобрать его как текстовый файл), используя COM cdosys.dll («Microsoft CDO для Windows 2000 Library»).

Вам нужно будет создать для него оболочку .Net, добавив ссылку: поскольку она зависит от ADODB.dll, вы получите Interop.CDO.dll и Interop.ADODB.dll, созданные для вас в каталоге bin. .

Существует много информации об отправке электронных писем с использованием CDO, но почти ничего об использовании ее для чтения EML-файлов, но я нашел эту страницу, с которой я начал http://support.microsoft.com/kb/310224

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...