Last Updated: 15 Oct, 2025

В чём разница между b/t MSG и EML? Как конвертировать b/t MSG в EML?

При работе с Форматами файлов электронной почты вы можете столкнуться с двумя распространёнными форматами: MSG и EML. Оба формата хранят сообщения электронной почты, но различаются по структуре, совместимости и использованию. В этой публикации мы рассмотрим их особенности и различия, а также способы конвертации между MSG и EML с помощью различных типов API и примеров кода.

Что такое файл MSG?

Формат файла MSG — это запатентованный формат, разработанный Microsoft. Он представляет собой отдельное сообщение электронной почты, встречу, контакт или задачу, сохранённую из Microsoft Outlook. Это запатентованный формат, то есть он разработан для оптимальной работы в экосистеме Outlook. Файлы MSG содержат всю информацию об электронном письме, включая отправителя, получателя, дату, тему, текст и вложения, а также специфичные для Outlook функции, такие как категории и флаги.

Основные характеристики:

  • Хранит содержимое, вложения и метаданные электронных писем (отправитель, получатель, тема).
  • Двоичный формат, основанный на формате Compound File Binary Format (CFBF).
  • Хранит метаданные, текст электронного письма (RTF или HTML) и вложения.
  • Используется в основном в среде Windows.

Что такое файл EML?

Формат файла EML — это открытый стандарт, определенный в RFC 5322, и более универсальный формат электронной почты, используемый различными почтовыми клиентами, такими как Mozilla Thunderbird, Windows Mail, Outlook Express и Apple Mail. Поскольку это текстовый формат, он более универсален и может открываться в различных операционных системах и на различных устройствах.

Основные характеристики:

  • Текстовый формат, в котором хранятся заголовки и содержимое в кодировке MIME.
  • Полная поддержка HTML-форматирования, встроенных изображений и вложений.
  • Не зависит от платформы и удобен для восприятия человеком.
  • Проще обрабатывать программно.

Ключевые различия между MSG и EML

ОсобенностиФормат MSGФормат EML
1Тип форматаДвоичный (собственный)Обычный текст (стандартный)
2СовместимостьMicrosoft OutlookThunderbird, Apple Mail, Gmail и т. д.
3Поддержка метаданныхПолная (включая встроенные объекты)Ограниченная (базовые заголовки и MIME)
4Удобочитаемость: требуетсяOutlook или специализированные инструментыЧитается человеком (текстовый)
5Обработка вложенийВнедрено в файлЗакодировано в Base64 в MIME

Теперь давайте рассмотрим, как преобразовать MSG в EML и EML в MSG с помощью популярных API с открытым исходным кодом и библиотек. Ниже приведены примеры кода с использованием различных API.

Как преобразовать MSG в EML с помощью API .NET?

Мы можем использовать библиотеки с открытым исходным кодом MsgKit и MimeKit для преобразования MSG-файлов в формат EML внутри приложений .NET. Хотя MsgKit сам по себе не предлагает встроенного экспорта в формат .eml, он упрощает чтение и извлечение всех компонентов .msg-файла, который затем можно записать в формате .eml с помощью других MIME-совместимых библиотек, таких как MimeKit или MailKit, как показано в следующем примере кода.

Как преобразовать MSG-файл в EML с помощью MsgKit?

using MsgReader.Outlook;
using MimeKit;
using System.IO;

var msg = new Storage.Message("sample.msg");
var mimeMessage = new MimeMessage();
mimeMessage.Subject = msg.Subject;
mimeMessage.From.Add(new MailboxAddress(msg.SenderName, msg.SenderEmail));
mimeMessage.To.Add(MailboxAddress.Parse(msg.GetEmailRecipients(Storage.RecipientType.To)[0].Email));
mimeMessage.Body = new TextPart("plain") { Text = msg.BodyText };

using var stream = File.Create("output.eml");
mimeMessage.WriteTo(stream);

Как преобразовать EML в файл MSG с помощью MimeKit?

using MsgKit;
using System.IO;

var email = new Email(
    new Sender("sender@example.com", "Sender Name"),
    "Subject of Email",
    "This is the plain body text.");

email.Recipients.AddTo("recipient@example.com", "Recipient Name");
email.Save(new FileInfo("output.msg"));

Преобразовать MSG в EML с помощью API Java с открытым исходным кодом?

Apache POI-HSMF и JavaMail можно использовать для загрузки и преобразования файлов Outlook MSG в формат EML. Apache POI-HSMF может читать файлы MSG, а JavaMail — генерировать файлы EML. Преобразование из EML в MSG в Java обычно требует либо платных SDK (например, Aspose), либо ручного анализа MIME и записи двоичных файлов MSG, что в настоящее время невозможно с использованием исключительно библиотек Java с открытым исходным кодом.

В следующем примере кода показано, как Apache POI-HSMF может читать файлы MSG, а JavaMail — генерировать файлы EML.

import org.apache.poi.hsmf.MAPIMessage;
import javax.mail.*;
import javax.mail.internet.*;

public class MsgToEmlConverter {
    public static void convert(String msgPath, String emlPath) throws Exception {
        MAPIMessage msg = new MAPIMessage(msgPath);
        MimeMessage eml = new MimeMessage((Session) null);
        
        eml.setFrom(new InternetAddress(msg.getDisplayFrom()));
        eml.setSubject(msg.getSubject());
        eml.setText(msg.getTextBody());
        
        // Save EML file
        eml.writeTo(new java.io.FileOutputStream(emlPath));
    }

    public static void main(String[] args) throws Exception {
        convert("input.msg", "output.eml");
    }
}

Лучшие коммерческие API для высокопроизводительной конвертации

1. Aspose.Email (кроссплатформенная .NET/Java/Python)

Aspose.Email предлагает мощное коммерческое решение для работы с файлами электронной почты. Всего парой строк кода разработчики могут загружать, обрабатывать и конвертировать MSG в EML и EML в MSG, используя различные языки программирования, такие как .NET, Java, Python и многие другие. В следующем примере показано, как конвертировать b/t MSG и EML с помощью Aspose.Email для .NET API.

Как конвертировать b/t EML в MSG с помощью Aspose.Email для .NET API?

// Convert MSG to EML
using Aspose.Email.Mime;
using Aspose.Email.Outlook;

var msg = MapiMessage.FromFile("input.msg");
msg.Save("output.eml", SaveOptions.DefaultEml);

// Convert EML to MSG
var eml = MailMessage.Load("input.eml");
eml.Save("output.msg", SaveOptions.DefaultMsgUnicode);

Как преобразовать b/t EML в MSG с помощью Aspose.Email for Java API?


import com.aspose.email.*; // Load the MSG file MailMessage message = MailMessage.load("input.msg"); // Save as EML message.save("output.eml", SaveOptions.getDefaultEml());

Как преобразовать b/t EML в MSG с помощью API Aspose.Email для Python?


import aspose.email as ae

# Load the EML file
eml = ae.MailMessage.load("input.eml")

# Save as MSG
eml.save("output.msg", ae.SaveOptions.default_msg_unicode)

2. Microsoft Graph API

Ещё один хороший коммерческий вариант, который стоит рассмотреть: Microsoft Graph API (облачный)

Конвертация MSG в EML через Microsoft Graph API (облачный)

import requests

headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN"}
response = requests.post(
    "https://graph.microsoft.com/v1.0/me/messages/{id}/content?format=eml",
    headers=headers
)
with open("output.eml", "wb") as f:
    f.write(response.content)

Бонус: онлайн-конвертеры (без кода)

Если вы не хотите программировать, вот очень надёжный и полезный онлайн-инструмент, который легко загружает и конвертирует файлы MSG в формат EML.

Заключение

Оба формата — MSG и EML — имеют свои уникальные преимущества. MSG идеально подходит для экосистем Microsoft благодаря полным метаданным и встроенным вложениям, а EML обеспечивает большую гибкость благодаря своей текстовой структуре на основе MIME. Независимо от того, являетесь ли вы разработчиком на .NET, Java, Python или JavaScript, существуют как открытые, так и коммерческие инструменты для конвертации между форматами MSG и EML. Выбирайте в зависимости от вашего языка, масштаба проекта и требований к лицензированию.

Часто задаваемые вопросы

В: Можно ли открыть файлы MSG без Outlook?

О: Да, библиотеки с открытым исходным кодом, такие как MsgReader (C#) или extract-msg (Python), позволяют читать файлы MSG без Outlook.

В: Какой формат лучше подходит для архивации электронной почты?

О: EML лучше благодаря своей открытости и удобству чтения человеком.

В: Существуют ли бесплатные API для преобразования MSG в EML?

О: Да, библиотеки, такие как MsgReader (.NET) и extract-msg (Python), полностью бесплатны и имеют открытый исходный код.

См. также