Last Updated: 15 Oct, 2025

メールファイル形式 を扱う際に、MSG と EML という2つの一般的な形式に遭遇するかもしれません。どちらもメールメッセージを保存しますが、構造、互換性、および使用方法が異なります。このブログ投稿では、これらの形式の概要、機能と相違点、そして様々な種類の API とコード例を使用して MSG と EML を変換 する方法について説明します。
MSG ファイルとは?
MSG ファイル形式は、Microsoft によって開発された**独自の形式です。Microsoft Outlook から保存された単一のメールメッセージ、予定、連絡先、またはタスクです。独自の形式であるため、Outlook エコシステム 内で最適に動作するように設計されています。MSG ファイルには、送信者、受信者、日付、件名、本文、添付ファイルなど、メールのすべての詳細情報に加え、カテゴリやフラグなどの Outlook 固有の機能も保存されます。
主な機能:
- メールの内容、添付ファイル、メタデータ(送信者、受信者、件名)を保存します。
- 複合ファイルバイナリ形式(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 | 添付ファイルの処理 | ファイル内に埋め込まれる | MIMEでBase64エンコード |
では、一般的なオープンソースAPIとライブラリを使用して、MSGからEML、およびEMLからMSGに変換する方法を見ていきましょう。以下は、さまざまなAPIを使用したコード例です。
.NET API を使用して MSG ファイルを EML に変換する方法
.NET アプリケーション内で MSG ファイルを EML ファイル形式に変換する には、オープンソースライブラリ MsgKit と MimeKit を使用できます。MsgKit 単体ではネイティブの .eml エクスポートは提供されていませんが、.msg ファイルのすべてのコンポーネントを簡単に読み取り、抽出できます。その後、MimeKit や MailKit などの他の MIME 準拠ライブラリを使用して .eml として書き出すことができます。次のコード例をご覧ください。
MsgKit を使用して MSG ファイルを EML に変換する方法
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);
MimeKit を使用して EML を MSG ファイルに変換する方法
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"));
オープンソースのJava APIを使ってMSGをEMLに変換できますか?
Apache POI-HSMFとJavaMailを使えば、OutlookのMSGファイルを読み込み、EMLファイル形式に変換できます。Apache POI-HSMFはMSGファイルを読み取り、JavaMailはEMLファイルを生成できます。JavaでEMLファイルをMSGに変換するには、通常、有料の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 は、メールファイル操作 のための強力な商用ソリューションを提供します。わずか数行のコードで、ソフトウェア開発者は .NET、Java、Python などの様々なプログラミング言語を使用して、MSG から EML および EML から MSG を読み込み、操作し、変換できます。次の例は、Aspose.Email for .NET API を使用して MSG と EML を相互に変換 する方法を示しています。
Aspose.Email for .NET API を使用して EML を MSG に変換する方法
// 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);
Aspose.Email for Java APIを使用してEMLをMSGに変換するにはどうすればいいですか?
import com.aspose.email.*; // Load the MSG file MailMessage message = MailMessage.load("input.msg"); // Save as EML message.save("output.eml", SaveOptions.getDefaultEml());
Aspose.Email for Python APIを使用してb/t EMLをMSGに変換するにはどうすればいいですか?
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(クラウドベース)が挙げられます。
Microsoft Graph API(クラウドベース)でMSGをEMLに変換
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形式を変換するためのオープンソースおよび商用ツールが利用可能です。言語、プロジェクトの規模、ライセンス要件に応じてお選びください。
FAQ
Q: OutlookなしでMSGファイルを開くことはできますか?
A: はい。MsgReader(C#)やextract-msg(Python)などのオープンソースライブラリを使用すれば、OutlookなしでMSGファイルを開くことができます。
Q: メールのアーカイブにはどちらの形式が適していますか?
A: EMLはオープンスタンダードで人間が読める形式であるため、より適しています。
Q: MSGをEMLに変換するための無料APIはありますか?
A: はい。MsgReader (.NET) や extract-msg (Python) などのライブラリは完全に無料でオープンソースです。