:mod:`email.iterators`: Iterators
---------------------------------

.. module:: email.iterators
   :synopsis: Iterate over a  message object tree.


Iterating over a message object tree is fairly easy with the
:meth:`Message.walk` method.  The :mod:`email.iterators` module provides some
useful higher level iterations over message object trees.


.. function:: body_line_iterator(msg, decode=False)

   This iterates over all the payloads in all the subparts of *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 :meth:`readline`, skipping over all the intervening headers.

   Optional *decode* is passed through to :meth:`Message.get_payload`.


.. function:: typed_subpart_iterator(msg, maintype='text', subtype=None)

   This iterates over all the subparts of *msg*, returning only those subparts that
   match the MIME type specified by *maintype* and *subtype*.

   Note that *subtype* is optional; if omitted, then subpart MIME type matching is
   done only with the main type.  *maintype* is optional too; it defaults to
   :mimetype:`text`.

   Thus, by default :func:`typed_subpart_iterator` returns each subpart that has a
   MIME type of :mimetype:`text/\*`.

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


.. function:: _structure(msg, fp=None, level=0, include_default=False)

   Prints an indented representation of the content types of the message object
   structure.  For example::

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

   Optional *fp* is a file-like object to print the output to.  It must be
   suitable for Python's :func:`print` function.  *level* is used internally.
   *include_default*, if true, prints the default type as well.
