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比使用容易得多imaplib,但了解IMAP 协议仍然很有用

(注意,我选择了一个任意的单个电子邮件 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}}

和身体通过:

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 回答