1

設定でPopをオンにしているので、「import poplib」を使用してGmailにアクセスしようとしていますが、実際にメッセージの「from」アドレスを確認して、それに基づいて何かを実行するにはどうすればよいですか?また、メッセージから「本文」のテキストを削除するコマンドは何でしょうか。

4

3 に答える 3

0

imaplibを使用して、GMailの受信トレイにある各メッセージの件名と送信者を取得する方法は次のとおりです。

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('username@gmail.com', 'password')

# Select the mail box
status, messages = conn.select('INBOX')

if status != "OK":
    print "Incorrect mail box"
    exit()

if int(messages[0]) > 0:

    for message_number in range(1,int(messages[0])+1):  
        data = conn.fetch(message_number, '(BODY[HEADER])')
        parser = HeaderParser()
        msg = parser.parsestr(data[1][0][1])
        print "Subject: %s" % msg['subject']
        print "From: %s" % msg['from']

おそらくもっと多くの情報が必要になるでしょう。公式のimaplibドキュメントから始めます。

于 2012-04-08T15:42:38.037 に答える
0

モジュールrfc822があります

poplibからのメッセージはサーバーからダウンロードできると思います。

次にファイルに入れます

>>> f = StringIO.StringIO(message)
>>> import rfc822

に渡されます

>>> rfc822.Message(f)

これを試してみてください..また、モジュールのドキュメントも確認してください。お役に立てば幸いです。


別のPythonモジュールがあります:

>>> import email
>>> email.message_from_string(...)

これにより、ヘッダーの読み取りアクセスが提供され、本文コンテンツの複数の形式もサポートされます。

于 2012-04-08T15:33:25.197 に答える
0

ドキュメントから:

POP3.retr(which)

Retrieve whole message number which, and set its seen flag. Result is in form (response, ['line', ...], octets).

したがって、の結果をretr()と呼ばれる変数に入れたとするとresponse、メッセージの行はリストとしてに格納されますresponse[1]RFC 2822により、ヘッダーがメッセージの本文から空白行で区切られていることがわかります。メッセージの送信者はFrom:ヘッダー行に表示されます。したがって、メッセージの行を繰り返し処理し、空白行が表示されたら停止し、。で始まる行が表示されたら送信者に変数を設定できますFrom:

sender = None
for line in response[1]:
    if line.startswith("From: "):
        sender = line.partition(" ")[2].strip()
    elif line == "":
        break

ヘッダーで多くのことを行う予定がある場合は、ヘッダー名で辞書に入れると便利な場合があります。各ヘッダーは複数回表示される可能性があるため、ディクショナリの各値はリストである必要があります。

 headers = {}
 for line in response[1]:
     if line == "":
        break
     line = line.partition(" ")
     key = line[0].strip().rstrip(":")
     value = line[2].stirp()
     headers.setdefault(key, []).append(value)

headers["From"][0]この後、メッセージの送信者を取得するために使用できます。

それほど複雑ではないので、これを行うための基本的な方法を示したかったのですが、Pythonがほとんどの作業を代行してくれます。retr()繰り返しますが、結果が次のようになっていると仮定しますresponse

 import email

 # convert our message back to a string and parse it
 headers = email.parsefromstring("\n".join(response[0]), headersonly=True)
 print headers["From"]  # prints the sender

メッセージオブジェクトの詳細については、電子メールモジュールのドキュメントを参照してください。

From:電子メールメッセージの行には、電子メールアドレスの他に、送信者の名前などの追加のテキストが含まれる場合があります。正規表現を使用してメールアドレスを抽出できます。

sender = re.find(r".*[ <](.+@.+)\b", headers["From"]).match(1)
于 2012-04-08T15:44:50.297 に答える