\declaremodule{standard}{email.iterators}
\modulesynopsis{メッセージオブジェクトツリーをたどる。}

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

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

オプション引数 \var{decode} は、\method{Message.get_payload()}にそのまま渡されます。
\end{funcdesc}

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

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

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

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

\begin{funcdesc}{_structure}{msg\optional{, fp\optional{, level}}}
そのメッセージオブジェクト構造の content-type をインデントつきで
表示します。たとえば:

\begin{verbatim}
>>> 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
\end{verbatim}

オプション引数 \var{fp} は出力を渡すためのストリーム
\footnote{訳注: 原文では file-like。}オブジェクトです。
これは Python の拡張 print 文が対応できるようになっている必要があります。
\var{level} は内部的に使用されます。
\end{funcdesc}
