【发布时间】:2014-12-11 07:32:46
【问题描述】:
我可以通过 imaplib 访问我存储在 GMail 中的电子邮件,如下所示:
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 以上的 id:
for i in itertools.count(start=1):
_, data = mail.fetch(str(i), "RFC822")
如何通过 Python 访问我在 GMail 上的所有电子邮件?
在 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")')
【问题讨论】:
-
放弃的时候试试the API
-
正如该网站所述,IMAP 应该更加“成熟”。也许我应该使用另一个 imap 客户端而不是标准库中的客户端。
-
你为什么不把它分解呢?收集1700,然后看日期,从那个日期收集到下一个1700结束?还是一次只做一个月/一年?
-
@JohnMee 谢谢,自从提出我的问题以来,我已经有了这个想法并且可以让它发挥作用。我相应地更新了它。
标签: python email python-3.x gmail gmail-imap