2013-02-25 55 views
2

我使用以下代碼從Gmail下載我的所有電子郵件,但不幸的是,返回的電子郵件總數與帳戶中的電子郵件總數不匹配。特別是,我能夠獲得前43條消息,但是我在收件箱中錯過了20多個。也許這是對可以退回的數字的某種限制(?)。預先感謝您提供的任何幫助!通過python從gmail獲取電子郵件

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 
+0

您是否試過conn.search(無,'ALL')獲取所有消息? – theodox 2013-02-25 21:00:00

+0

是的,我更新了代碼片段以明確'status'設置爲'ALL' – vgoklani 2013-02-25 21:03:44

+0

您可以嘗試使用conn.search()而不是conn.uid()。你會得到索引而不是uid,但是當你獲取消息時你可以得到uid。 – theodox 2013-02-25 21:15:24

回答

1

我使用以下方法來獲取所有的電子郵件。

resp,data = mail.uid('FETCH', '1:*' , '(RFC822)') 

,並讓所有的id的I使用:

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

給出:

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

編輯

在我的情況下的跟蹤返回202個日期是超出了OP所尋找的並且是正確的n紅棕色。

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') 
相關問題