通过Python获取Gmail邮件
我正在使用以下代码从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
1 个回答
1
我用下面的代码来获取所有的邮件信息。
resp,data = mail.uid('FETCH', '1:*' , '(RFC822)')
然后为了获取所有的 id
,我使用:
result, data = mail.uid('search', None, "ALL")
print data[0].split()
这个代码返回:
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', ... etc ]
编辑
在我的情况下,下面的代码返回了202个日期,这个数量超过了提问者想要的,实际上是正确的数量。
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')