メッセージオブジェクト構造体をつくるには 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 クラスの間に 隠された秘密の関係はなにもありませんので、ご自分で実装されたパーザも、 それが必要とするやりかたでメッセージオブジェクトツリーを作成することができます。