2013-02-25 3 views
2

Я использую следующий код, чтобы загрузить все мои письма из gmail, но, к сожалению, общее количество возвращенных сообщений не совпадает с общим количеством электронных писем в учетной записи. В частности, я могу получить первые 43 сообщения, но я считаю, что еще 20 в папке «Входящие» пропущены. Возможно, это какой-то предел числа, которое можно оттянуть назад (?). Заранее благодарим за любую помощь!Получение писем от gmail через python

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 (None, 'ALL'), чтобы получить все сообщения? – theodox

+0

да, я обновил фрагмент кода, чтобы было ясно, что для «status» установлено значение «ALL». – vgoklani

+0

Вы можете попробовать использовать conn.search() вместо conn.uid(). Вы получите индексы, а не uids, но вы можете получить uid, когда вы получите сообщение. – theodox

ответ

1

Я использую следующее, чтобы получить все сообщения электронной почты.

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 ] 

EDIT

В моем случае последующий возврат 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') 
Смежные вопросы