0

IMAPClientを使用して、メッセージ本文と送信者の電子メールアドレスを表示するにはどうすればよいですか?

server = IMAPClient(imap_server, use_uid=True, ssl=ssl)
server.login(imap_user, imap_password)

print 'login successful'

select_info = server.select_folder('INBOX')
print '%d messages in INBOX' % select_info['EXISTS']

messages = server.search(['NOT DELETED'])
print "%d messages that aren't deleted" % len(messages)

print
print "Messages:"
response = server.fetch(messages, ['FLAGS', 'RFC822.SIZE'])
for msgid, data in response.iteritems():
    print '   ID %d: %d bytes, flags=%s' % (msgid,
                                            data['RFC822.SIZE'],
                                            data['FLAGS'])
4

3 に答える 3

9

IMAPClientを使用するよりもはるかに簡単ですが、IMAPプロトコルimaplibについて知っておくと便利です。

(注:操作する任意の単一の電子メールIDを選択しました)

FROMは次の方法で取得できます。

server.fetch([456], ['BODY[HEADER.FIELDS (FROM)]'])
# {456: {'BODY[HEADER.FIELDS (FROM)]': 'From: Facebook <register+mr4k25sa@facebookmail.com>\r\n\r\n', 'SEQ': 456}}

そして、BODY経由:

server.fetch([456], ['BODY[TEXT]'])
# {456: {'BODY[TEXT]': "Hey Jon,\r\n\r\nYou recently entered a new contact email [snip]", 'SEQ': 456}}

ただし、一般的に簡単なのは次のことです。

import email
m = server.fetch([456], ['RFC822'])
msg = email.message_from_string(m[456]['RFC822'])
print msg['from']
# Facebook <register+mr4k25sa@facebookmail.com>
from email.utils import parseaddr
print parseaddr(msg['from'])
# ('Facebook', 'register+mr4k25sa@facebookmail.com')
print msg.get_payload()
# content of email...

ペイロードに添付ファイルが含まれている場所やマルチパートである場所に注意してください...

于 2012-11-03T19:27:41.407 に答える
0

メッセージ本文は次のように見つかります(ループを使用して、削除されていない各メッセージ本文を印刷します):

  for i in server[0].split():
      body = server.fetch(i,"BODY[TEXT]")
      print(body)

これはメッセージ本文に対してそれを行う必要があります...

于 2012-11-03T19:11:04.550 に答える
0

IMAPClientはかなり低レベルのライブラリであるため、IMAPプロトコルを知っている必要があります。

より高レベルのIMAPライブラリを使用してみることができます:imap_tools

  • 解析された電子メールメッセージ属性
  • メールを検索するためのクエリビルダー
  • フォルダ内の電子メールを操作する(コピー、削除、フラグ付け、移動、表示)
  • メールボックスフォルダの操作(リスト、設定、取得、作成、存在、名前の変更、削除、ステータス)
  • 依存関係なし
于 2020-04-11T11:00:34.323 に答える