通过python从gmail获取电子邮件

通过python从gmail获取电子邮件,python,gmail,gmail-imap,Python,Gmail,Gmail Imap,我正在使用以下代码从gmail下载所有电子邮件,但不幸的是,返回的电子邮件总数与帐户中的电子邮件总数不匹配。特别是,我能够收到前43封邮件,但我发现收件箱中还有20多封邮件没有收到。也许这是对可以撤回的数量的某种限制(?)。提前感谢您提供的任何帮助 import imaplib, email, base64 def fetch_messages(username, password): messages = [] conn = imaplib.IMAP4_SSL("imap.g

我正在使用以下代码从gmail下载所有电子邮件,但不幸的是,返回的电子邮件总数与帐户中的电子邮件总数不匹配。特别是,我能够收到前43封邮件,但我发现收件箱中还有20多封邮件没有收到。也许这是对可以撤回的数量的某种限制(?)。提前感谢您提供的任何帮助

import imaplib, email, base64

def fetch_messages(username, password):
    messages = []
    conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
    conn.login(username, password)
    conn.select()
    typ, data = conn.uid('search', None, 'ALL')

    for num in data[0].split():
        typ, msg_data = conn.uid('fetch', num, '(RFC822)')
        for response_part in msg_data:
            if isinstance(response_part, tuple):
                messages.append(email.message_from_string(response_part[1]))
        typ, response = conn.store(num, '+FLAGS', r'(\Seen)')
    return messages

我使用以下信息获取所有电子邮件

resp,data = mail.uid('FETCH', '1:*' , '(RFC822)')
要获取我使用的所有
id
s,请执行以下操作:

result, data = mail.uid('search', None, "ALL")
print data[0].split()
给出:

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', ... etc ]
编辑

在我的例子中,follow返回202个日期,这些日期超过了OP要查找的日期,并且是正确的数字

resp,data = mail.uid('FETCH', '1:*' , '(RFC822)')
messages = [data[i][1].strip() for i in xrange(0, len(data), 2)] 
for msg in messages:
    msg_str = email.message_from_string(msg)
    print msg_str.get('Date')

您是否尝试过使用conn.search(None,'ALL')来获取所有消息?是的,我更新了代码段以明确“status”设置为“ALL”?您可以尝试使用conn.search()而不是conn.uid()。您将获得索引而不是uid,但在获取消息时可以获得uid。