Загрузка, просмотр и разбор файла MSG

Эта тема объясняет, как загрузить файл сообщения Microsoft Outlook (*.msg). Класс MapiMessage используется для загрузки файлов MSG и предоставляет несколько статических функций загрузки для различных сценариев. Следующий фрагмент кода показывает, как загрузить файлы MSG из файла или из потока.

Загрузка файлов MSG

Следующий фрагмент кода показывает, как загрузить файлы MSG.

// Путь к директории с файлами.
string dataDir = RunExamples.GetDataDir_Outlook();

// Создайте экземпляр MapiMessage из файла
MapiMessage msg = MapiMessage.Load(dataDir + @"message.msg");

// Получить тему
Console.WriteLine("Тема:" + msg.Subject);

// Получить адрес отправителя
Console.WriteLine("От:" + msg.SenderEmailAddress);

// Получить тело
Console.WriteLine("Тело" + msg.Body);

// Получить информацию о получателях
Console.WriteLine("Получатель: " + msg.Recipients);

// Получить вложения
foreach (MapiAttachment att in msg.Attachments)
{
    Console.Write("Имя вложения: " + att.FileName);
    Console.Write("Отображаемое имя вложения: " + att.DisplayName);
}

Следующий пример кода показывает, как использовать MailMessage для загрузки сообщения в формате MSG.


MailMessage eml = MailMessage.Load("message.msg");

Следует отметить, что полученное сообщение конвертируется в формат EML, включая вложенные сообщения. Не используйте этот метод загрузки, если вы хотите сохранить некоторые специфические свойства формата msg оригинального сообщения.

Чтобы сохранить оригинальный формат вложенных сообщений, используйте свойство msgLoadOptions.PreserveEmbeddedMessageFormat.


MsgLoadOptions msgLoadOptions = new MsgLoadOptions();
msgLoadOptions.PreserveEmbeddedMessageFormat = true;
var msg = MailMessage.Load(stream, msgLoadOptions);

Загрузка из потока

Следующий фрагмент кода показывает, как загрузить файл из потока.

// Создайте экземпляр MapiMessage из файла
byte[] bytes = File.ReadAllBytes(dataDir + @"message.msg");

using (MemoryStream stream = new MemoryStream(bytes))
{
    stream.Seek(0, SeekOrigin.Begin);
    // Создайте экземпляр MapiMessage из файла
    MapiMessage msg = MapiMessage.Load(stream);

    // Получить тему
    Console.WriteLine("Тема:" + msg.Subject);

    // Получить адрес отправителя
    Console.WriteLine("От:" + msg.SenderEmailAddress);

    // Получить тело
    Console.WriteLine("Тело" + msg.Body);

}

Конвертация EML в MSG с сохранением формата встроенного EML

Файлы EML могут быть загружены в класс MapiMessage путем создания объекта MailMessage и передачи его в метод MapiMessage.FromMailMessage. Если файл EML содержит встроенные файлы EML, используйте MapiConversionOptions.PreserveEmbeddedMessageFormat для сохранения формата встроенных файлов EML. Ниже приведен фрагмент кода, показывающий, как загрузить файлы EML в MapiMessage с сохранением формата встроенных файлов EML.