2008-08-19 7 views
16

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

ответ

9

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

+0

Вау, я просто попробовал, и он очень прост в использовании. Я добавлю ответ с битом тестового жгута кода. – Knox 2010-03-02 18:34:04

0

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

Было бы довольно легко написать некоторый код для анализа файла, ищущего строки, начинающиеся с «От:» или «Кому:» и т. Д., А затем извлечение необходимую вам информацию.

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

+1

Я считаю, Thats .EML файлов .msg является двоичным – 2009-06-10 21:52:29

+0

Они есть, но он прав. Попробуй и посмотри сам – rotard 2010-07-13 19:09:19

6

Microsoft зафиксировала это: .MSG File Format Specification

+0

спасибо и ugh ... это немного больше, чем я хотел укусить в :-P – 2016-06-16 14:52:32

3

Это документ с структурированным хранением. Я успешно использовал Andrew Peace's code, чтобы прочитать их в прошлом, даже в .NET (с использованием C++/CLI) - он чист и довольно прост для понимания. В принципе, вам нужно выяснить, какие записи вам нужны, и запросить их - он становится немного волосатым, поскольку разные версии Outlook и различные типы сообщений приведут к разным записям ...

10

Имеется код на CodeProject для чтения файлов .msg без COM. См. here.

8

Вот пример кода VBA с использованием Outlook Redemption, найденного Huseyint.

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 
1

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

// 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); 

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