6

ヘッダーやその他のパラメーターを渡さずにメールの本文のみを取得する Python プログラムを作成しようとしています。どうすればいいのかわかりません。

目標は、メッセージ テキストを介して基本的なコマンドをプログラムに送信できるようにすることです。

私が今持っているのはこれです:

import poplib

host = "pop.gmail.com"
mail = poplib.POP3_SSL(host)
print mail.getwelcome()
print mail.user("user")
print mail.pass_("pass")
print mail.stat()
print mail.list()
print ""

if mail.stat()[1] > 0:
    print "You have new mail."
else:
    print "No new mail."

print ""

numMessages = len(mail.list()[1])
for i in range(numMessages):
    for j in mail.retr(i+1)[1]:
        print j

mail.quit()
input("Press any key to continue.")

「print J」が実行された場合を除いて、これはすべて問題ありません。ヘッダーを含むメッセージ全体が出力されます。追加のゴミなしで本文テキストを抽出したいだけです。

誰でも助けることができますか?ありがとう!

4

3 に答える 3

5

メールモジュールを使用して、ヘッダー情報をスキップするget_payload()メソッドでメールメッセージの本文を取得します。

私はあなたのコードに数行を追加しました (それらは# new statement行末に でマークされています)

import poplib
import email # new statement

host = "pop.gmail.com"
mail = poplib.POP3_SSL(host)
print mail.getwelcome()
print mail.user("user")
print mail.pass_("pass")
print mail.stat()
print mail.list()
print ""

if mail.stat()[1] > 0:
    print "You have new mail."
else:
    print "No new mail."

print ""

numMessages = len(mail.list()[1])
for i in range(numMessages):
    for j in mail.retr(i+1)[1]:
        #print j
        msg = email.message_from_string(j) # new statement
        print(msg.get_payload()) # new statement

mail.quit()
input("Press any key to continue.")
于 2011-03-22T16:06:21.593 に答える
4

これは、私自身の POP3 リーダーからのコードの一部です。

        response, lines, bytes = pop.retr(m)

        # remove trailing blank lines from message
        while lines[-1]=="": 
            del lines[-1]

        try:
            endOfHeader = lines.index('')
            header = lines[:endOfHeader]
            body = lines[endOfHeader+1:]
        except ValueError:
            header = lines
            body = []

これにより、すべての行のリストの最初の空の行がヘッダー情報の最後としてキーオフされます。次に、そこからメッセージ本文の最後までのスライスをリストします。

于 2010-02-07T21:33:19.603 に答える
2

email モジュールを使用して、電子メールを解析できます。

于 2010-02-07T20:03:21.430 に答える