### 1 FeedParser API

バージョン 2.4 で 新たに追加 された仕様です。

`FeedParser` API は email メッセージを漸進的に解析するのに向いています。 これは email メッセージのテキストを (ソケットなどの) 読み込みがブロックされる 可能性のある情報源から入力するときに必要となります。もちろん `FeedParser` は 文字列またはファイルにすべて格納されている email メッセージを解析するのにも 使うことができますが、このような場合には旧式の `Parser` API のほうが 便利かもしれません。これら 2つのパーザ API の意味論と得られる結果は同一です。

`FeedParser` API は簡単です。まずインスタンスをつくり、それに テキストを (それ以上テキストが必要なくなるまで) 流しこみます。その後 パーザを close すると根っこ (root) のメッセージオブジェクトが返されます。 標準に従ったメッセージを解析する場合、`FeedParser` は非常に 正確であり、標準に従っていないメッセージでもちゃんと動きます。 そのさい、これはメッセージがどのように壊れていると認識されたかについての 情報を残します。これはメッセージオブジェクトの defects 属性に リストとして現れ、メッセージ中に発見された問題が記録されます。 パーザが検出できる障害 (defect) については `email.Errors` モジュールを参照してください。

以下は `FeedParser` の API です:

クラス `FeedParser`( | [_factory])

  `FeedParser` インスタンスを作成します。オプション引数 _factory には 引数なしの callable を指定し、これはつねに新しいメッセージオブジェクトの作成が 必要になったときに呼び出されます。デフォルトでは、これは `email.Message.Message` クラスになっています。

`feed`( | data)

  `FeedParser` にデータを供給します。data は 1行または複数行からなる 文字列を渡します。渡される行は完結していなくてもよく、その場合 `FeedParser` は部分的な行を適切につなぎ合わせます。文字列中の各行は標準的な 3種類の 行末文字 (復帰 CR、改行 LF、または CR+LF) どれかの組み合わせでよく、これらが 混在してもかまいません。

`close`( | )

  `FeedParser` を close し、それまでに渡されたすべてのデータの 解析を完了させ根っこ (root) のメッセージオブジェクトを返します。 `FeedParser` を close したあとにさらにデータを feed した場合の 挙動は未定義です。