7.1.2 電子メールメッセージを解析(パース)する

メッセージオブジェクト構造体をつくるには 2つの方法があります。 ひとつはまったくのスクラッチから Message を生成して、これを attach()set_payload() 呼び出しを介してつなげていく方法で、 もうひとつは電子メールメッセージのフラットなテキスト表現を 解析 (parse、パーズ) する方法です。

email パッケージでは、MIME 文書をふくむ、 ほとんどの電子メールの文書構造に対応できる標準的なパーザ (解析器) を提供しています。 このパーザに文字列あるいはファイルオブジェクトを渡せば、パーザは そのオブジェクト構造の基底となる (root の) Message インスタンスを返します。 簡単な非MIMEメッセージであれば、この基底オブジェクトのペイロードは たんにメッセージのテキストを格納する文字列になるでしょう。MIMEメッセージであれば、 基底オブジェクトはその is_multipart() メソッドに対して True を 返します。そして、その各 subpart に get_payload() メソッドおよび walk() メソッドを介してアクセスすることができます。

実際には 2つのパーザインターフェイスが使用可能です。ひとつは旧式の Parser API であり、もうひとつはインクリメンタルな FeedParser API です。 旧式の Parser API はメッセージ全体のテキストが文字列としてすでに メモリ上にあるか、それがローカルなファイルシステム上に存在しているときには 問題ありません。FeedParser はメッセージを読み込むときに、そのストリームが 入力待ちのためにブロックされるような場合 (ソケットから email メッセージを 読み込む時など) に、より有効です。FeedParser はインクリメンタ ルにメッセージを読み込み、解析します。パーザを close したときには根っ こ (root) のオブジェクトのみが返されます7.1

このパーザは、ある制限された方法で拡張できます。また、もちろん 自分でご自分のパーザを完全に無から実装することもできます。 email パッケージについているパーザと Message クラスの間に 隠された秘密の関係はなにもありませんので、ご自分で実装されたパーザも、 それが必要とするやりかたでメッセージオブジェクトツリーを作成することができます。



脚注

... のオブジェクトのみが返されます7.1
Python 2.4 から導入 された email パッケージ バージョン 3.0 では、 旧式の ParserFeedParser によって書き直されました。 そのためパーザの意味論と得られる結果は 2つのパーザで同一のものになります。



Subsections
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。