Iterating over a message object tree is fairly easy with the
Message.walk() method. The email.Iterators module
provides some useful higher level iterations over message object
trees.
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
readline(), skipping over all the intervening headers.
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 text.
Thus, by default typed_subpart_iterator() returns each
subpart that has a MIME type of text/*.