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

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

email.iterators.body_line_iterator(msg[, decode])

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

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

email.iterators.typed_subpart_iterator(msg[, maintype[, subtype]])

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

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

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

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

email.iterators._structure(msg[, fp[, level]])

   そのメッセージオブジェクト構造の 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* は内部的に使用されます
   。
