Статьи

Как анализировать и просматривать файлы Outlook .msg программно

В этой статье показано, как можно проанализировать и просмотреть MSG-файлы Outlook, используя собственный код в приложениях C #, для которых Microsoft Office Outlook не требуется. Также доступна отдельная демонстрационная программа Outlook msg Viewer (прилагается к этой статье), которая поможет вам при анализе и чтении MSG-файлов Outlook с использованием библиотеки Aspose.Network .

Как разобрать и просмотреть содержимое Msg-файла программно

В этом разделе мы представим код, который мы использовали в демонстрации, чтобы показать содержимое файла msg.

Загрузка файла Msg

Библиотека Aspose.Network предоставляет класс MapiMessage для загрузки и анализа файлов MSG. Вы можете загрузить файл msg, используя одну строку кода, вызвав статический метод FromFile () и передав путь к файлу msg.

[C#]MapiMessage msg = MapiMessage.FromFile(“C:\\SomeFolder\\SomeMsgFile.msg”);
[VB.NET]Dim msg As MapiMessage = MapiMessage.FromFile(“C:\\SomeFolder\\SomeMsgFile.msg”)

Получение From, To, Cc и Subject из Msg-файла

Класс MapiMessage предоставляет свойства и коллекции для получения объектов, cc и from. Ниже приведен пример кода для получения этих свойств.

[C#]// subjectif (msg.Subject != null)Console.WriteLine(msg.Subject);elseConsole.WriteLine("no subject");// senderif (msg.SenderEmailAddress != null)Console.WriteLine(msg.SenderEmailAddress);elseConsole.WriteLine("No sender");// toif (msg.DisplayTo != null)Console.WriteLine(msg.DisplayTo);elseConsole.WriteLine("No one in To");// ccif (msg.DisplayCc != null)Console.WriteLine(msg.DisplayCc);elseConsole.WriteLine("No one in cc");
[VB.NET]' subjectIf Not msg.Subject Is Nothing ThenConsole.WriteLine(msg.Subject)ElseConsole.WriteLine("no subject")End If' senderIf Not msg.SenderEmailAddress Is Nothing ThenConsole.WriteLine(msg.SenderEmailAddress)ElseConsole.WriteLine("No sender")End If' toIf Not msg.DisplayTo Is Nothing ThenConsole.WriteLine(msg.DisplayTo)ElseConsole.WriteLine("No one in To")End If' ccIf Not msg.DisplayCc Is Nothing ThenConsole.WriteLine(msg.DisplayCc)ElseConsole.WriteLine("No one in cc")End If

 

Получение текстового тела и Rtf тела сообщения

Мы можем получить Text и Rtf body сообщения, используя свойства класса MapiMessage. Следуя примеру кода, чтобы получить это.

[C#]// text bodyif (msg.Body != null)Console.WriteLine(msg.Body);elseConsole.WriteLine("no text body.");// rtf bodyif (msg.BodyRtf != null)Console.WriteLine(msg.BodyRtf);elseConsole.WriteLine("No Rtf body.");
[VB.NET]' text bodyIf Not msg.Body Is Nothing ThenConsole.WriteLine(msg.Body)ElseConsole.WriteLine("no text body.")End If' rtf bodyIf Not msg.BodyRtf Is Nothing ThenConsole.WriteLine(msg.BodyRtf)ElseConsole.WriteLine("No Rtf body.")End If

 

Получение вложений из Msg-файла и сохранение на диск

Класс MapiMessage предоставляет коллекцию Attachments для получения всех вложений в файле сообщений (msg). Свойство MapiMessage.Attachments возвращает объект типа MapiAttachmentCollection. Вы можете использовать цикл foreach для перебора коллекции вложений и перечисления вложений. Класс вложений содержит метод Save () для сохранения отдельного вложения на диск. Ниже приведен пример кода для получения списка вложений и сохранения на диск.

[C#]

// iterate through the Attachments collection
foreach (MapiAttachment att in msg.Attachments)
{

try
{
// show attachment name on screen
Console.WriteLine(att.LongFileName);

// save in local drive/folder
att.Save(att.LongFileName);

}

catch (Exception ex) { Console.WriteLine(ex.Message;) }

}
[VB.NET]' iterate through the Attachments collectionFor Each att As MapiAttachment In msg.AttachmentsTry' show attachment name on screenConsole.WriteLine(att.LongFileName)' save in local drive/folderatt.Save(att.LongFileName)Catch ex As ExceptionConsole.WriteLine(ex.Message;)End TryNext att

 

Получение свойств MAPI файла Msg

Вы можете получить свойства MAPI из файла Msg, используя коллекцию «Properties» класса MapiMessage. Ниже приведен пример кода для получения всех свойств MAPI, присутствующих в файле сообщений.

[C#]try{Aspose.Network.Outlook.MapiProperty mapi = Aspose.Network.Outlook.MapiProperty)dictionaryEntry.Value;if (mapi.Name.Trim().Length > 0){// display name of MAPI propertyConsole.WriteLine(mapi.Name);// display value of the MAPI propertyConsole.WriteLine(mapi.ToString());}}catch (Exception e){Console.WriteLine(e.Message);}
[VB.NET]TryDim mapi As Aspose.Network.Outlook.MapiProperty = Aspose.Network.Outlook.MapiProperty)dictionaryEntry.ValueIf mapi.Name.Trim().Length > 0 Then' display name of MAPI propertyConsole.WriteLine(mapi.Name)' display value of the MAPI propertyConsole.WriteLine(mapi.ToString())End IfCatch e As ExceptionConsole.WriteLine(e.Message)End Try

Подробнее о Aspose.Network для .NET

Aspose.Network представляет собой набор компонентов .NET для сетевого программирования с поддержкой каркаса ведения журналов .NET, Microsoft Exchange Server и позволяет анализировать документ Outlook с функциями перетаскивания. Он предоставляет новый механизм iCalendar и поддержку SSL для протоколов SMTP, POP3 и IMAP с другими функциями слияния. Вы можете импортировать и экспортировать электронные письма в форматах MHT и EML. Он поддерживает все функции компонентов SMTP, MIME, S / MIME, POP3, FTP, WhoIs, DNS, ICMP, IMAP, HTTP, SOCKS 4 / 4A и SOCKS 5.