Last Updated: 15 Oct, 2025

Podczas pracy z Formatami plików e-mail możesz natknąć się na dwa popularne formaty: MSG i EML. Oba przechowują wiadomości e-mail, ale różnią się strukturą, kompatybilnością i zastosowaniem. W tym wpisie na blogu omówimy, czym są te formaty, ich funkcje i różnice oraz jak konwertować pliki MSG i EML za pomocą różnych typów interfejsów API i przykładów kodu.
Czym jest plik MSG?
Format pliku MSG to zastrzeżony format opracowany przez firmę Microsoft. Jest to pojedyncza wiadomość e-mail, spotkanie, kontakt lub zadanie zapisane w Microsoft Outlook. Jest to zastrzeżony format, co oznacza, że został zaprojektowany tak, aby najlepiej działać w ekosystemie Outlook. Pliki MSG zawierają wszystkie szczegóły wiadomości e-mail, w tym nadawcę, odbiorcę, datę, temat, treść i załączniki, a także funkcje specyficzne dla programu Outlook, takie jak kategorie i flagi.
Najważniejsze cechy:
- Przechowuje treść wiadomości e-mail, załączniki i metadane (nadawca, odbiorca, temat).
- Format binarny oparty na formacie Compound File Binary Format (CFBF).
- Przechowuje metadane, treść wiadomości e-mail (RTF lub HTML) i załączniki.
- Używany głównie w środowiskach Windows.
Czym jest plik EML?
Format pliku EML to otwarty standard zdefiniowany w RFC 5322 i jest bardziej uniwersalnym formatem wiadomości e-mail używanym przez różne programy pocztowe, takie jak Mozilla Thunderbird, Windows Mail, Outlook Express i Apple Mail. Ponieważ jest to format zwykłego tekstu, jest bardziej wszechstronny i można go otwierać w różnych systemach operacyjnych i na różnych urządzeniach.
Najważniejsze cechy:
- Format tekstowy, który przechowuje nagłówki i treść zakodowaną w standardzie MIME.
- Pełna obsługa formatowania HTML, obrazów w tekście i załączników.
- Niezależne od platformy i czytelne dla człowieka.
- Łatwiejsze do przetwarzania programistycznego.
Kluczowe różnice między MSG a EML
Nr | Funkcja | Format MSG | Format EML |
---|---|---|---|
1 | Typ formatu | Binarny (zastrzeżony) | Zwykły tekst (standardowy) |
2 | Zgodność | Microsoft Outlook | Thunderbird, Apple Mail, Gmail itp. |
3 | Obsługa metadanych | Pełna (w tym obiekty osadzone) | Ograniczona (podstawowe nagłówki i MIME) |
4 | Wymagana czytelność | Outlook lub specjalistyczne narzędzia | Czytelny dla człowieka (tekstowy) |
5 | Obsługa załączników | Osadzone w pliku | Kodowanie Base64 w MIME |
Teraz przyjrzyjmy się, jak konwertować MSG do EML i EML do MSG za pomocą popularnych interfejsów API open source i bibliotek. Poniżej znajdują się przykłady kodu wykorzystujące różne interfejsy API.
Jak konwertować MSG do EML za pomocą interfejsów API .NET?
Możemy użyć bibliotek open source MsgKit i MimeKit do konwertowania pliku MSG do formatu EML w aplikacjach .NET. Chociaż sam MsgKit nie oferuje natywnego eksportu do formatu .eml, ułatwia on odczyt i wyodrębnienie wszystkich komponentów pliku .msg, które następnie można zapisać w formacie .eml za pomocą innych bibliotek zgodnych ze standardem MIME, takich jak MimeKit lub MailKit, jak pokazano w poniższym przykładzie kodu.
Jak konwertować plik MSG do EML za pomocą 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);
Jak przekonwertować plik EML na plik MSG za pomocą 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"));
Konwersja MSG do EML za pomocą interfejsów API Java Open Source?
Apache POI-HSMF i JavaMail mogą być używane do ładowania i konwersji plików MSG programu Outlook do formatu EML. Apache POI-HSMF może odczytywać pliki MSG, a JavaMail może generować pliki EML. Konwersja z EML do MSG w Javie zazwyczaj wymagałaby płatnych zestawów SDK (takich jak Aspose) lub ręcznej analizy składni MIME i zapisu binarnego MSG — co obecnie nie jest możliwe przy użyciu wyłącznie bibliotek Java Open Source.
Poniższy przykład kodu pokazuje, jak Apache POI-HSMF może odczytywać pliki MSG, a JavaMail może generować pliki 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");
}
}
Najlepsze komercyjne API do wydajnej konwersji
1. Aspose.Email (wieloplatformowy .NET/Java/Python)
Aspose.Email oferuje potężne komercyjne rozwiązanie do pracy z plikami e-mail. Za pomocą zaledwie kilku linijek kodu programiści mogą ładować, modyfikować i konwertować pliki MSG na EML oraz EML na MSG, używając różnych języków programowania, takich jak .NET, Java, Python i wielu innych. Poniższy przykład pokazuje, jak konwertować pliki MSG i EML za pomocą Aspose.Email dla .NET API.
Jak przekonwertować pliki EML na MSG za pomocą Aspose.Email dla .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);
How to Convert b/t EML to MSG using 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());
Jak przekonwertować b/t EML na MSG przy użyciu API Aspose.Email dla Pythona?
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. Interfejs API Microsoft Graph
Kolejna dobra opcja komercyjna do rozważenia Microsoft Graph API (w chmurze)
Konwertuj MSG do EML za pomocą interfejsu API Microsoft Graph (w chmurze)
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)
Bonus: Konwertery online (bez kodu)
Jeśli nie chcesz programować, oto bardzo niezawodne i przydatne narzędzie online, które z łatwością wczytuje i konwertuje pliki MSG do formatu EML.
Podsumowanie
Zarówno formaty MSG, jak i EML mają swoje unikalne zalety. MSG idealnie nadaje się do ekosystemów Microsoft z pełnymi metadanymi i osadzonymi załącznikami, podczas gdy EML oferuje większą elastyczność dzięki swojej strukturze opartej na zwykłym tekście i MIME. Niezależnie od tego, czy jesteś programistą .NET, Java, Python czy JavaScript, dostępne są narzędzia open source i komercyjne do konwersji między formatami MSG i EML. Wybierz w zależności od języka, skali projektu i potrzeb licencyjnych.
FAQ
P: Czy mogę otwierać pliki MSG bez Outlooka?
O: Tak, biblioteki open source, takie jak MsgReader (C#) lub extract-msg (Python), umożliwiają odczyt plików MSG bez Outlooka.
P: Który format jest lepszy do archiwizacji wiadomości e-mail?
O: EML jest lepszy ze względu na otwarty standard i format czytelny dla człowieka.
P: Czy istnieją darmowe API do konwersji plików MSG do EML?
O: Tak, biblioteki takie jak MsgReader (.NET) i extract-msg (Python) są całkowicie darmowe i open source.