使用来自gmail的简单电子邮件,python imaplib获取结果为none

时间:2015-01-02 14:29:21

标签: python gmail-imap

我收到的是因为我用Thunderbird或gmail webapp写的电子邮件的结果。

例如我的主题是“myfancysubject”,文字只是“你好”

通过使用带有

的imaplib fetch操作,我得不到数据(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')

1 个答案:

答案 0 :(得分:2)

得到解决方案,你必须在使用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。当两个邮件被删除时,这两个邮件会有所不同。

可能没有提供任何内容,因为带有该邮件的邮件可能已被删除或其他内容。