\declaremodule{standard}{email.Iterators}
\modulesynopsis{Iterate over a  message object tree.}

Iterating over a message object tree is fairly easy with the
\method{Message.walk()} method.  The \module{email.Iterators} module
provides some useful higher level iterations over message object
trees.

\begin{funcdesc}{body_line_iterator}{msg\optional{, decode}}
This iterates over all the payloads in all the subparts of \var{msg},
returning the string payloads line-by-line.  It skips over all the
subpart headers, and it skips over any subpart with a payload that
isn't a Python string.  This is somewhat equivalent to reading the
flat text representation of the message from a file using
\method{readline()}, skipping over all the intervening headers.

Optional \var{decode} is passed through to \method{Message.get_payload()}.
\end{funcdesc}

\begin{funcdesc}{typed_subpart_iterator}{msg\optional{,
    maintype\optional{, subtype}}}
This iterates over all the subparts of \var{msg}, returning only those
subparts that match the MIME type specified by \var{maintype} and
\var{subtype}.

Note that \var{subtype} is optional; if omitted, then subpart MIME
type matching is done only with the main type.  \var{maintype} is
optional too; it defaults to \mimetype{text}.

Thus, by default \function{typed_subpart_iterator()} returns each
subpart that has a MIME type of \mimetype{text/*}.
\end{funcdesc}

The following function has been added as a useful debugging tool.  It
should \emph{not} be considered part of the supported public interface
for the package.

\begin{funcdesc}{_structure}{msg\optional{, fp\optional{, level}}}
Prints an indented representation of the content types of the
message object structure.  For example:

\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}

Optional \var{fp} is a file-like object to print the output to.  It
must be suitable for Python's extended print statement.  \var{level}
is used internally.
\end{funcdesc}
