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