0

ここでPython 3のドキュメントを読んでいますが、盲目か何かに違いありません...メッセージの本文を取得する方法はどこに書かれていますか?

私がやりたいことは、メッセージを開いて、メッセージのテキストベースの本文でいくつかのループを実行し、バイナリの添付ファイルをスキップすることです。擬似コード:

def read_all_bodies(local_email_file):
    email = Parser().parse(open(local_email_file, 'r'))
    for pseudo_body in email.pseudo_bodies:
        if pseudo_body.pseudo_is_binary():
            continue
        # Pseudo-parse the body here

それ、どうやったら出来るの?Message クラスでさえこれに対して正しいクラスですか? ヘッダーだけじゃないの?

4

1 に答える 1

1

これには、次の 2 つの関数を使用するのが最適です。

  1. ファイルを開くための 1 つ。メッセージが単一パートの場合、メッセージget_payload内の文字列を返します。メッセージがマルチパートの場合、サブメッセージのリストを返します
  2. テキスト/ペイロードを処理する 2 番目

これはそれができる方法です:

def parse_file_bodies(filename):
    # Opens file and parses email
    email = Parser().parse(open(filename, 'r'))
    # For multipart emails, all bodies will be handled in a loop
    if email.is_multipart():
        for msg in email.get_payload():
            parse_single_body(msg)
    else:
        # Single part message is passed diractly
        parse_single_body(email)

def parse_single_body(email):
    payload = email.get_payload(decode=True)
    # The payload is binary. It must be converted to
    # python string depending in input charset
    # Input charset may vary, based on message
    try:
        text = payload.decode("utf-8")
        # Now you can work with text as with any other string:
        ...
    except UnicodeDecodeError:
        print("Error: cannot parse message as UTF-8")
        return  
于 2016-11-29T23:37:23.223 に答える