はじめに

メールメッセージをプログラムで解析することは、データ移行、アーカイブワークフロー、コンプライアンスツールにおいて一般的な要件です。Outlook の MSG ファイルは、Compound File Binary(CFB)コンテナ形式と MAPI プロパティを使用して、メッセージのメタデータ、本文、受信者、添付ファイルをエンコードします。この形式を Python で扱うには、従来は商用ライブラリか低レベルのバイナリ操作が必要でした。

aspose-email-foss パッケージは、pure-Python で MIT ライセンスの Outlook MSG ファイルの読み取り、作成、変換用ライブラリを提供します。一般的なタスク向けの高レベル MapiMessage API と、基盤となる CFB 構造の詳細検査用の低レベル MsgReader アクセスを公開しています。ライブラリは Python 3.10 以降を必要とし、ネイティブ依存関係はありません。

アーカイブされたメッセージのバッチから件名と本文を抽出したり、インデックス作成のために添付ファイルを列挙したり、MSG ファイルを標準の RFC 5322 形式に変換したりする必要がある場合でも、このライブラリがバイナリ解析を処理するので、アプリケーションロジックに集中できます。


含まれるもの

MapiMessage を使用した MSG ファイルの読み取り

MapiMessage クラスは Outlook MSG ファイルを解析するための主要なエントリーポイントです。ファイルを開き、プロパティにアクセスし、コンテキストマネージャを使ってきれいに閉じます。

from aspose.email_foss import msg

with msg.MapiMessage.from_file("meeting-invite.msg") as message:
    print(f"Subject: {message.subject}")
    print(f"Body: {message.body[:200]}")
    print(f"HTML body available: {message.body_html is not None}")

The from_file メソッドは CFB コンテナを読み取り、MAPI プロパティ ストリームを解析し、型付き属性を埋め込みます。 The subjectbody、および body_html プロパティはデコードされた文字列を直接返します。

受信者の抽出

すべての MSG ファイルは、専用の MAPI ストレージに受信者情報を格納します。MapiMessage.recipients プロパティは、表示名、メールアドレス、受信者タイプ(TO、CC、または BCC)の型付きフィールドを持つ MapiRecipient オブジェクトのリストを返します。

from aspose.email_foss import msg

with msg.MapiMessage.from_file("team-update.msg") as message:
    for recipient in message.recipients:
        print(
            f"{recipient.display_name} <{recipient.email_address}> "
            f"type={recipient.recipient_type}"
        )

添付ファイルの操作

The iter_attachments_info メソッドは、ファイル名、生バイト列、MIME タイプ、およびインライン画像用のオプションの Content-ID を提供する MapiAttachment オブジェクトを生成します。

from aspose.email_foss import msg

with msg.MapiMessage.from_file("report.msg") as message:
    for att in message.iter_attachments_info():
        print(f"  {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
        if att.content_id:
            print(f"    inline content-id: {att.content_id}")

MAPI プロパティへのアクセス

便利属性を超えて特定の MAPI プロパティ値が必要なシナリオでは、get_property_valuePropertyId 定数と共に使用します。これにより、MSG ファイルに格納された任意のプロパティへ直接アクセスできます。

from aspose.email_foss import msg

with msg.MapiMessage.from_file("notification.msg") as message:
    sender = message.get_property_value(msg.PropertyId.SENDER_NAME)
    email = message.get_property_value(msg.PropertyId.SENDER_EMAIL_ADDRESS)
    delivery = message.get_property_value(msg.PropertyId.MESSAGE_DELIVERY_TIME)
    print(f"From: {sender} <{email}>")
    print(f"Delivered: {delivery}")

すべてのプロパティをイテレートする

メッセージ内のすべてのプロパティを検査する必要がある場合(デバッグ、監査、または移行のために)、iter_properties メソッドは完全なタグと値の情報を持つ MapiProperty オブジェクトを生成します。

from aspose.email_foss import msg

with msg.MapiMessage.from_file("sample.msg") as message:
    for prop in message.iter_properties():
        print(
            f"tag=0x{prop.property_tag:08X} "
            f"type=0x{prop.property_type:04X} "
            f"value={prop.value!r}"
        )

MSG を EML に変換

to_email_message メソッドは、解析された MSG を標準的な Python email.message.EmailMessage オブジェクトに変換します。そこから、標準ライブラリを使用してメッセージを RFC 5322(EML)形式にシリアライズできます。

from aspose.email_foss import msg

with msg.MapiMessage.from_file("archive.msg") as message:
    email_message = message.to_email_message()
    eml_bytes = email_message.as_bytes()
    with open("archive.eml", "wb") as f:
        f.write(eml_bytes)

EML 出力は、Python の組み込み email モジュールをシリアライズに使用することに注意してください。このライブラリは MSG から MAPI へ、そして EmailMessage への変換を処理し、標準ライブラリが RFC 5322 のワイヤーフォーマットを処理します。


クイックスタート

パッケージを PyPI からインストールし、20 行未満で最初の MSG ファイルを解析します:

# Install: pip install aspose-email-foss>=26.3
from aspose.email_foss import msg

# Create a new message
message = msg.MapiMessage.create(
    "Project status update",
    "Hello team,\n\nPlease review the attached report.\n\nRegards",
)
message.add_recipient("alice@example.com", display_name="Alice")
message.add_attachment("notes.txt", b"meeting notes\n", mime_type="text/plain")
message.save("status-update.msg")

# Read it back and extract data
with msg.MapiMessage.from_file("status-update.msg") as loaded:
    print(f"Subject: {loaded.subject}")
    print(f"Recipients: {len(loaded.recipients)}")
    for att in loaded.iter_attachments_info():
        print(f"Attachment: {att.filename} ({len(att.data)} bytes)")

サポートされているフォーマット

フォーマット拡張子読み取り書き込み
Outlook MSG.msgはいはい
Compound File Binary.cfbはいはい
EML (変換経由).emlはい (via from_email_message)はい (via to_email_message)

EML のサポートは変換を通じて機能します:MapiMessage.from_email_message() は Python の email.message.EmailMessage オブジェクトからインポートし、to_email_message() は再びエクスポートします。直接的な EML ファイルの解析は提供されていません — 標準ライブラリが EML のワイヤーフォーマットを処理します。


オープンソース & ライセンス

Aspose.Email FOSS for Python は MIT ライセンスの下でリリースされています。商用プロジェクトでも非商用プロジェクトでも、ライブラリを使用、改変、配布することが自由です。完全なソースコードは GitHub で入手可能です。

このライブラリは純粋なPython実装で、コンパイル済み拡張やネイティブ依存関係はありません。Python 3.10 以降をサポートする任意のプラットフォームで動作します。


開始手順

Aspose.Email FOSS for Python の活用に関するリソースをさらにご覧ください:

  • Developer Guide — チュートリアルとAPIウォークスルーを含む完全なドキュメント
  • Knowledge Base — ハウツー記事と FAQ
  • API Reference — 完全なクラスとメソッドのリファレンス

関連リソース