Python IMAPlib 获取结果是没有来自 Gmail 的简单电子邮件



我得到的不是因为我用Thunderbird或gmail网络应用程序写的电子邮件。

例如,我的主题是"myfancysubject",而文本只是"hello"

我通过使用 imaplib 获取操作来获取任何数据 (NONE)

 result, data = mail.fetch(latest_email_id, '(RFC822)') # fetch the email body (RFC822) for the given ID

我的假设是邮件没有RFC822标签?

但是我怎样才能得到那封邮件的内容呢?

这是我的完整代码:

import imaplib
import email
try:
    mail = imaplib.IMAP4_SSL('imap.gmail.com')
    mail.login('email@gmail.com', 'password')
    labels = mail.list()
    # Out: list of "folders" aka labels in gmail.
    inbox = mail.select("inbox") # connect to inbox.
    #result, data = mail.search(None, "ALL")
    result, data = mail.uid('search', None, '(HEADER Subject "myfancysubject")')

    ids = data[0] # data is a list.
    id_list = ids.split() # ids is a space separated string
    latest_email_id = None
    if len(id_list) == 1:
        latest_email_id = id_list[0] # get the latest
        pass
    else:
        latest_email_id = id_list[-1]
        pass
    result, data = mail.fetch(latest_email_id, '(RFC822)') # fetch the email body (RFC822) for the given ID
    print(data)
    raw_email = data[0][0]
    email_message = email.message_from_string(raw_email)
    print email_message['To']
    print email.utils.parseaddr(email_message['From'])
    print email_message.items() # print all headers
except Exception:
    print('Ex')

有了解决方案,您必须在使用 uid 或顺序 id 时保持一致

而不是使用

result, data = mail.fetch(latest_email_id, '(RFC822)')

我不得不使用:

result, data = mail.uid('fetch', latest_email_id, '(RFC822)')

和以前一样,您搜索的是 UID 而不是序列 ID。然后后来您尝试通过序列 ID 获取 RFC822 或邮件正文(默认)。

您尝试获取序列 id x 而不是 uid x。当中间删除某些邮件时,这两者会有所不同。

它可能没有给出,因为带有该 se 的邮件可能已被删除或其他内容。

最新更新