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

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

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

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

おもなパーザクラスは Parser です。これは電子メールの ヘッダおよびペイロードを両方解析します。multipart メッセージの 場合、これはそのコンテナのボディを再帰的に解析します。 解析には 2つのモードがサポートされており、ひとつは strict 解析で、 これはふつういかなる RFC非準拠なメッセージも受けつけません。 もうひとつは lax 解析で、こちらはよく知られた MIME の書式上の 問題に対処しようとします。

email.Parser モジュールはまた、HeaderParser と呼ばれる 2番目のクラスも提供しています。これはメッセージのヘッダのみを処理したい場合に 使うことができ、ずっと高速な処理がおこなえます。なぜならこれはメッセージ本体を 解析しようとはしないからです。かわりに、そのペイロードにはメッセージ本体の 生の文字列が格納されます。HeaderParser クラスは Parser クラスと同じ API をもっています。



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