### 12.2.2.1 Parser クラスの API

class `Parser`( | [_class[, strict]])

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

  オプション引数である strict フラグは、strict 解析と lax 解析の どちらをおこなうかを指定します。MIME 終端文字列が欠けているとか、 メッセージにその他の書式上の問題がある場合、`Parser` は `MessageParseError` を発生させます。しかし、lax 解析が 有効になっている場合、`Parser` は崩れた書式からなんとかして 有効なメッセージ構造を生成しようと試みます (これは `MessageParseError` が 絶対に発生しないということではありません、ある種の異常な書式の メッセージはやはり解析できません)。デフォルトでは、strict フラグは `False` になっています。これは通常 lax 解析がもっとも理にかなった ふるまいを提供するためです。

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

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

`parse`( | fp[, headersonly])

  ファイルなどストリーム形式 12.1 のオブジェクト 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)

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