7.1.10 イテレータ

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

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

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

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

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

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

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

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

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

オプション引数 fp は出力を渡すためのストリーム 7.7オブジェクトです。 これは Python の拡張 print 文が対応できるようになっている必要があります。 level は内部的に使用されます。



脚注

... は出力を渡すためのストリーム7.7
訳注: 原文では file-like。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。