6

Python imap と email パッケージを使用して、メールの本文 (テキストのみ) を取得したいと考えています。

このSO スレッドに従って、次のコードを使用しています。

mail = email.message_from_string(email_body)
bodytext = mail.get_payload()[ 0 ].get_payload()

一部のインスタンスでは正常に機能していますが、次のような応答が得られることがあります

[<email.message.Message instance at 0x0206DCD8>, <email.message.Message instance at 0x0206D508>]
4

4 に答える 4

7

私の場合の主な問題は、返信または転送されたメッセージが本文にメッセージ インスタンスとして表示されることです。

次のコードを使用して問題を解決しました。

bodytext=mail.get_payload()[0].get_payload();
if type(bodytext) is list:
    bodytext=','.join(str(v) for v in bodytext)
于 2013-05-07T12:24:36.083 に答える
7

メッセージは、明確に定義された 1 つの「主要部分」を持つ、統一された構造を持っていると想定しています。そうではありません。テキスト部分ではない単一の部分 (バイナリ ファイルの単なる「添付ファイル」であり、他には何もない) を持つメッセージが存在する場合もあれば、複数のテキスト部分 (または、まったくない) を持つマルチパートである場合もあります。 1 つしかない場合は、最初の部分である必要はありません。さらに、ネストされたマルチパートがあります (1 つ以上のパートが再帰的に別の MIME メッセージになります)。

つまり、MIME 構造を調べてから、アプリケーションに関連する部分を判断する必要があります。かなり静的で少数のクライアントからのみメッセージを受信する場合は、(少なくとも Microsoft Plague ヒットの次のアップグレードまで) いくつかのコーナーをカットできる可能性がありますが、一般的に、階層はまったくありません。同等に重要な部分 (必ずしも直接関連するとは限りません) の単なるコレクションです。

于 2013-05-08T04:09:11.803 に答える
0

たぶん、この投稿(私の)が役立つかもしれません。米国のさまざまな種類の石油の価格が記載されたニュースレターを受け取ります。タイトルの特定のパターンを使用して gmail でメールを取得し、正規表現を使用してメール本文の価格を抽出します。したがって、タイトルが特定のパターンを観察する最後のn通の電子メールのメール本文にアクセスする必要があります。

email.message_from_string()も使用しています:msg = email.message_from_string(response_part[1])

したがって、このpython libでメソッドを使用する方法の具体的な例が得られるかもしれません。

于 2013-05-07T05:37:13.920 に答える