Вопрос

Мне нужно прочитать из Outlook.Файл MSG в .NET без использование COM API для Outlook (потому что он не будет установлен на компьютерах, на которых будет запущено мое приложение).Существуют ли какие-либо бесплатные сторонние библиотеки для этого?Я хочу извлечь поля From, To, CC и BCC.Поля даты отправки / получения были бы хороши, если бы они также хранились в файлах MSG.

Это было полезно?

Решение 2

Обновить: Я нашел стороннюю COM-библиотеку под названием Погашение перспективы который на данный момент у меня работает нормально.Если вы используете его через COM-взаимодействие в .NET, не забудьте освободить каждый COM-объект после того, как закончите с ним, иначе ваше приложение случайно завершит работу.

Другие советы

В CodeProject доступен код для чтения msg-файлов без COM.Видишь здесь.

Вот несколько примеров кода VBA, использующего Погашение перспективы то, что нашел Хусейн.

Public Sub ProcessMail()

   Dim Sess As RDOSession
   Dim myMsg As RDOMail
   Dim myString As String

   Set Sess = CreateObject("Redemption.RDOSession")
   Set myMsg = Sess.GetMessageFromMsgFile("C:\TestHarness\kmail.msg")

   myString = myMsg.Body
   myMsg.Body = Replace(myString, "8750", "XXXX")

   myMsg.Save

End Sub

Корпорация Майкрософт задокументировала это: Спецификация формата файла .MSG

Это документ "Структурированного хранилища".Я успешно использовал Кодекс Эндрю Писа читать их раньше, даже под .NET (используя C ++ / CLI) - это чисто и довольно легко понять.По сути, вам нужно выяснить, какие записи вам нужны, и запросить их - это становится немного сложнее, поскольку разные версии Outlook и разные типы сообщений приведут к разным записям...

Вы можете попробовать наш (коммерческий) Повторная отправка Защищенной почты библиотека.Он может считывать Outlook в формате MSG.Следующий код показывает, как:

// Load message
MailMessage message = new MailMessage();
message.Load(@"c:\Temp\t\message.msg");

// show From, To and Sent date
Console.WriteLine("From: {0}", message.From);
Console.WriteLine("To: {0}", message.To);
Console.WriteLine("Sent: {0}", message.Date.LocalTime);

// find and try to parse the first 'Received' header
MailDateTime receivedDate = null;
string received = message.Headers.GetRaw("Received");
if (received != null)
{
    int lastSemicolon = received.LastIndexOf(';');
    if (lastSemicolon >= 0)
    {
        string rawDate = received.Substring(lastSemicolon + 1);
        MimeHeader header = new MimeHeader("Date", rawDate);
        receivedDate = header.Value as MailDateTime;
    }
}

// display the received date if available
if (receivedDate != null)
    Console.WriteLine("Received: {0}", receivedDate.LocalTime);

Более подробную информацию о датах отправки и получения и о том, как они представлены в сообщении, можно найти по адресу http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones

Если вы откроете файл .MSG в текстовом редакторе, я полагаю, вы обнаружите, что нужная вам информация хранится внутри файла в виде обычного текста.(По крайней мере, это есть во всех сообщениях, которые я проверил)

Было бы довольно легко написать какой-нибудь код для синтаксического анализа файла в поисках строк, начинающихся с "From:" или "To:" и т.д.а затем извлеките необходимую вам информацию.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top