Просмотрщик файлов MSG Outlook
Эта статья посвящена разбору и просмотру файлов MSG Microsoft Outlook. Если вам нужно управлять файлами MSG в вашем проекте или приложении, вам нужен API для разбора формата Outlook MSG. Или, если у вас нет Microsoft Outlook, установленного на вашей системе, вы можете создать собственный просмотрщик для получения содержимого файла MSG.
Примеры кода в этой статье показывают, как разобрать файл MSG Outlook в приложении C# с использованием библиотеки Aspose.Email. Aspose.Email — это .NET библиотека, доступная в виде DLL. Используйте эту библиотеку для просмотра файлов MSG в Windows, вебе, консольных или любых других приложениях на основе .NET. Пробную версию Aspose.Email можно легко скачать. Исходный код для проекта ниже включен в образцы, предоставленные с установщиком.
Демо просмотрщика MSG Outlook
Мы создали простое демо-приложение, которое можно использовать для разбора и просмотра файлов MSG. Пользовательский интерфейс можно увидеть ниже:
Левая панель показывает диски и папки на системе, как это делает проводник Windows. Вы можете просматривать папки, чтобы отобразить или отфильтровать файлы MSG. Только файлы MSG появляются в верхнем списке контроллера отображения в соответствующей папке в древовидном представлении. Как видно из скриншота выше, поля Тема, От, Кому и Копия отображаются в верхнем списке. Если вы щелкните на любом MSG в списке, соответствующее сообщение откроется, и детали можно будет увидеть в интерфейсе ниже контроллера списка. Мы использовали метки для отображения информации о теме, кому, копии и от.
В нижней панели мы использовали вкладки для показа других деталей сообщения, таких как текстовое тело, RTF тело, заголовок сообщения, вложения и свойства MAPI. Если вы щелкните на вкладку Вложения, она показывает список вложений в файле MSG (если они есть). Вы также можете сохранить вложения на свою систему, выбрав вложение и щелкнув кнопку Сохранить. Откроется диалоговое окно сохранения файла. Перейдите в нужную папку и сохраните файл там. Следующий скриншот показывает вид вкладки Вложения.
Парсинг и просмотр содержимого файла MSG программным образом
В этом разделе мы представим код, который мы использовали в демо, чтобы показать содержимое файла MSG.
Загрузка файла MSG
Библиотека Aspose.Email предоставляет класс MapiMessage для загрузки и разбора файлов MSG. Вы можете загрузить файл MSG с помощью одной строки кода, вызвав статический метод FromFile() и передав путь к файлу MSG. Следующий фрагмент кода показывает, как загрузить файл MSG.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string dataDir = RunExamples.GetDataDir_KnowledgeBase(); | |
MapiMessage msg = MapiMessage.FromFile(dataDir + "Message.msg"); |
Получение информации От, Кому, Копия и Тема из файла MSG
Класс MapiMessage предоставляет свойства и коллекции для получения информации о теме, от, к кому и копии. Следующий пример кода показывает, как получить эти свойства. Следующий фрагмент кода показывает, как получить От, Кому, Копия и Тема из файла MSG.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string dataDir = RunExamples.GetDataDir_KnowledgeBase(); | |
// Load mail message | |
MailMessage msg = MailMessage.Load(dataDir + "Message.eml", new EmlLoadOptions()); | |
// Subject | |
if (msg.Subject != null) | |
Console.WriteLine(msg.Subject); | |
else | |
Console.WriteLine("no subject"); | |
// From | |
if (msg.From != null) | |
Console.WriteLine(msg.From); | |
else | |
Console.WriteLine("No sender"); | |
// To | |
if (msg.To != null) | |
Console.WriteLine(msg.To); | |
else | |
Console.WriteLine("No one in To"); | |
// Cc | |
if (msg.CC != null) | |
Console.WriteLine(msg.CC); | |
else | |
Console.WriteLine("No one in cc"); | |
Получение текстовых и RTF тел
Мы можем получить текстовые и RTF тела сообщения, используя свойства класса MapiMessage. Следующий фрагмент кода показывает, как получить текстовые и RTF тела.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string dataDir = RunExamples.GetDataDir_Outlook(); | |
// Load mail message | |
MapiMessage msg = MapiMessage.FromMailMessage(dataDir + "Message.eml"); | |
MapiMessageItemBase itemBase = new MapiMessage(); | |
// Text body | |
if (itemBase.Body != null) | |
Console.WriteLine(msg.Body); | |
else | |
Console.WriteLine("There's no text body."); | |
// RTF body | |
if (itemBase.BodyRtf != null) | |
Console.WriteLine(msg.BodyRtf); | |
else | |
Console.WriteLine("There's no RTF body."); |
Получение вложений из файла MSG и сохранение на диск
Класс MapiMessage предоставляет коллекцию Attachments для получения всех вложений в файле сообщения (MSG). Свойство MapiMessage.Attachments возвращает объект типа MapiAttachmentCollection. Вы можете использовать цикл for-each, чтобы перебрать коллекцию вложений и перечислить вложения. Класс Attachment содержит метод Save() для сохранения отдельного вложения на диск. Следующий фрагмент кода показывает, как получить список вложений и сохранить их.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Iterate through the Attachments collection | |
foreach (MapiAttachment att in msg.Attachments) | |
{ | |
try | |
{ | |
// Show the name of the attachment on screen and Save to local drive/folder | |
Console.WriteLine(att.LongFileName); | |
att.Save(att.LongFileName); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
} |
Получение свойств MAPI файла MSG
Вы можете получить свойства MAPI из файла MSG, используя коллекцию свойств класса MapiMessage. Пример кода ниже показывает, как получить все свойства MAPI в файле сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MapiProperty mapi = msg.Properties[MapiPropertyTag.PR_SUBJECT_W]; | |
if (mapi.Name.Trim().Length > 0) | |
{ | |
// Display the MAPI property name and value | |
Console.WriteLine(mapi.Name); | |
Console.WriteLine(mapi.ToString()); | |
} |