はじめに
メールメッセージをプログラムで解析することは、データ移行、アーカイブワークフロー、コンプライアンスツールにおいて一般的な要件です。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 subject、body、および 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_value を PropertyId 定数と共に使用します。これにより、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 — 完全なクラスとメソッドのリファレンス