Last Updated: 15 Oct, 2025

При работе с Форматами файлов электронной почты вы можете столкнуться с двумя распространёнными форматами: 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 Outlook | Thunderbird, 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), полностью бесплатны и имеют открытый исходный код.