### 2 Parser クラス API

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

クラス `Parser`( | [_class[, strict]])

  `Parser` クラスのコンストラクタです。 オプション引数 _class をとることができ、これは呼び出し可能な オブジェクト (関数やクラス) でなければならず、 メッセージ内コンポーネント (sub-message object) が作成されるときは いつでもその“工場”として使用できなければなりません。 デフォルトではこれは `Message` になっています (`email.Message` 参照)。この“工場”は引数なしで呼び出されます。

  オプション引数 strict は無視されます。

  リリース 2.4 で撤廃されました。 `Parser` は Python 2.4 で新しく導入された `FeedParser` の 後方互換性のための API ラッパで、すべての 解析が事実上 non-strict です。 `Parser` コンストラクタに strict フラグを渡す必要はありません。

  バージョン 2.2.2 で 変更 された仕様: strict フラグが追加されました バージョン 2.4 で 変更 された仕様: strict フラグは推奨されなくなりました

それ以外の `Parser` メソッドは以下のとおりです:

`parse`( | fp[, headersonly])

  ファイルなどストリーム形式 38 のオブジェクト fp から すべてのデータを読み込み、得られたテキストを解析して基底 (root) メッセージ オブジェクト構造を返します。fp はストリーム形式のオブジェクトで `readline()` および `read()` 両方のメソッドを サポートしている必要があります。

  fp に格納されているテキスト文字列は、一連の RFC 2822 形式の ヘッダおよびヘッダ継続行 (header continuation lines) によって構成されている 必要があります。オプションとして、最初にエンペローブヘッダが来ることもできます。 ヘッダ部分はデータの終端か、ひとつの空行によって終了したとみなされます。 ヘッダ部分に続くデータはメッセージ本体となります (MIME エンコードされた subpart を含んでいるかもしれません)。

  オプション引数 headersonly はヘッダ部分を解析しただけで終了するか 否かを指定します。デフォルトの値は `False` で、これはそのファイルの 内容すべてを解析することを意味しています。

  バージョン 2.2.2 で 変更 された仕様: headersonly フラグが追加されました

`parsestr`( | text[, headersonly])

  メソッドに似ていますが、ファイルなどのストリーム形式のかわりに 文字列を引数としてとるところが違います。文字列に対してこのメソッドを 呼ぶことは、text を `StringIO` インスタンスとして作成して `parse()` を適用するのと同じです。

  オプション引数 headersonly は `parse()` メソッドと同じです。

  バージョン 2.2.2 で 変更 された仕様: headersonly フラグが追加されました

ファイルや文字列からメッセージオブジェクト構造を作成するのは かなりよくおこなわれる作業なので、便宜上次のような 2つの関数が 提供されています。これらは `email` パッケージのトップレベルの 名前空間で使用できます。

`message_from_string`( | s[, _class[, strict]])

  文字列からメッセージオブジェクト構造を作成し返します。 これは `Parser().parsestr(s)` とまったく同じです。 オプション引数 _class および strict は `Parser` クラスの コンストラクタと同様に解釈されます。

  バージョン 2.2.2 で 変更 された仕様: strict フラグが追加されました

`message_from_file`( | fp[, _class[, strict]])

  Open されたファイルオブジェクトからメッセージオブジェクト構造を作成し返します。 これは `Parser().parse(fp)` とまったく同じです。 オプション引数 _class および strict は `Parser` クラスの コンストラクタと同様に解釈されます。

  バージョン 2.2.2 で 変更 された仕様: strict フラグが追加されました

対話的な Python プロンプトでこの関数を使用するとすれば、このようになります:

    >>> import email
    >>> msg = email.message_from_string(myString)

#### Footnotes

... ファイルなどストリーム形式 38
  file-like object