Last Updated: 15 Oct, 2025

MSGとEMLの違いは何ですか?MSGをEMLに変換するにはどうすればいいですか?

メールファイル形式 を扱う際に、MSGEML という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 OutlookThunderbird、Apple Mail、Gmailなど
3メタデータのサポート完全(埋め込みオブジェクトを含む)限定的(基本ヘッダーとMIME)
4読み取りに必要なツールOutlookまたは専用ツール人間が読める形式(テキストベース)
5添付ファイルの処理ファイル内に埋め込まれるMIMEでBase64エンコード

では、一般的なオープンソースAPIとライブラリを使用して、MSGからEML、およびEMLからMSGに変換する方法を見ていきましょう。以下は、さまざまなAPIを使用したコード例です。

.NET API を使用して MSG ファイルを EML に変換する方法

.NET アプリケーション内で MSG ファイルを EML ファイル形式に変換する には、オープンソースライブラリ MsgKitMimeKit を使用できます。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) などのライブラリは完全に無料でオープンソースです。

参照