Я могу получить доступ сообщения электронной почты, хранящиеся на GMail через imaplib следующим образом:Как получить доступ ко всем сообщениям электронной почты на GMail через IMAP с помощью Python?
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(username, password)
mail.select(mailbox='INBOX', readonly=True)
_, data = mail.search(None, '(ALL)')
Однако data
содержит только 1790 самые последние сообщения электронной почты. Когда я итерацию по номерам почты, data
является None
для идентификаторами выше 1790:
for i in itertools.count(start=1):
_, data = mail.fetch(str(i), "RFC822")
Как получить доступ все мои электронные письма на GMail с помощью Python?
В webinterface GMAIL, я могу найти для запросов диапазона, как это:
"in:anywhere after:2014-01-01 before:2014-01-02"
Но Python не может разобрать такие запросы:
_, data = mail.search(None, '(ALL "in:anywhere")')
File "/usr/local/lib/python3.4/imaplib.py", line 660, in search
typ, dat = self._simple_command(name, *criteria)
File "/usr/local/lib/python3.4/imaplib.py", line 1134, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/local/lib/python3.4/imaplib.py", line 965, in _command_complete
raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SEARCH command error: BAD [b'Could not parse command']
Диапазон запросов должны работать в теории работы несколько, как этот according to the docs on Gmail's IMAP extensions. Однако, когда я search for a range of dates as in RFC 3501, я получаю сообщения, которые были отправлены в течение этого периода времени:
_, data = mail.search(None, '(SINCE "01-Jan-2011" BEFORE "01-Jan-2012")')
Когда вы сдаетесь, попробуйте [АНИ] (https://developers.google.com/gmail/api/) –
Как то сайта, IMAP должен быть более «полноценным». Возможно, я должен использовать другой клиент imap, чем тот, который есть в стандартной библиотеке. – Bengt
Почему бы вам не сломать его? Соберите 1700, затем посмотрите дату и получите с этой даты до конца следующего 1700 года? Или просто сделать это один месяц/год за раз? –