19.1.15. email.iterators: イテレータ

ソースコード: Lib/email/iterators.py


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

email.iterators.body_line_iterator(msg, decode=False)

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

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

email.iterators.typed_subpart_iterator(msg, maintype='text', subtype=None)

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

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

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

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

email.iterators._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 print() function. level is used internally. include_default, if true, prints the default type as well.