"email.iterators": イテレータ
*****************************

**ソースコード:** Lib/email/iterators.py

======================================================================

"Message.walk" メソッドを使うと、簡単にメッセージオブジェクトツリー内
を次から次へとたどる (iteration) ことができます。 "email.iterators" モ
ジュールはこのための高水準イテレータをいくつか提供します。

email.iterators.body_line_iterator(msg, decode=False)

   このイテレータは *msg* 中のすべてのサブパートに含まれるペイロードを
   すべて順にたどっていき、ペイロード内の文字列を 1 行ずつ返します。サ
   ブパートのヘッダはすべて無視され、Python 文字列でないペイロードから
   なるサブパートも無視されます。これは "readline()" を使って、ファイ
   ルからメッセージを (ヘッダだけとばして) フラットなテキストとして読
   むのにいくぶん似ているかもしれません。

   オプション引数 *decode* は、 "Message.get_payload" にそのまま渡され
   ます。

email.iterators.typed_subpart_iterator(msg, maintype='text', subtype=None)

   このイテレータは *msg* 中のすべてのサブパートをたどり、それらの中で
   指定されたMIME 形式 *maintype* と *subtype* をもつようなパートのみ
   を返します。

   *subtype* は省略可能であることに注意してください。これが省略された
   場合、サブパートの MIME 形式は maintype のみがチェックされます。じ
   つは *maintype* も省略可能で、その場合にはデフォルトは *text* です
   。

   つまり、デフォルトでは "typed_subpart_iterator()" は MIME 形式
   *text/** をもつサブパートを順に返していくというわけです。

以下の関数は役に立つデバッグ用ツールとして追加されたもので、パッケージ
として公式なサポートのあるインターフェイスでは *ありません*。

email.iterators._structure(msg, fp=None, level=0, include_default=False)

   そのメッセージオブジェクト構造の content-type をインデントつきで表
   示します。例えば:

      >>> msg = email.message_from_file(somefile)
      >>> _structure(msg)
      multipart/mixed
          text/plain
          text/plain
          multipart/digest
              message/rfc822
                  text/plain
              message/rfc822
                  text/plain
              message/rfc822
                  text/plain
              message/rfc822
                  text/plain
              message/rfc822
                  text/plain
          text/plain

   オプション引数 *fp* は出力を渡すための file-like オブジェクトです。
   これは Python の "print()" 関数が対応できるようになっている必要があ
   ります。 *level* は内部的に使用されます。 *include_default* が真の
   場合、デフォルトの型も出力します。
