【发布时间】:2011-12-16 08:34:47
【问题描述】:
我正在尝试使用 imaplib 从 Python 中的特定地址获取所有自动回复电子邮件。数周以来一切正常,但现在每次我运行我的程序时,我的所有 RAM 都会被消耗掉(几 GB!),并且脚本最终被 OOM 杀手杀死。
这是我目前使用的代码:
M = imaplib.IMAP4_SSL('server')
M.LOGIN('user', 'pass')
M.SELECT()
date = (datetime.date.today() - datetime.timedelta(1)).strftime("%d-%b-%Y")
result, data = M.uid('search', None, '(SENTON %s HEADER FROM "auto@site.com" NOT SUBJECT "RE:")' % date)
...
我确信应该返回少于 100 封几千字节的电子邮件。这里可能是什么问题?或者有没有办法限制返回的电子邮件数量? 谢谢!
【问题讨论】:
-
(1) 我认为您的代码中的大写是错字,因为它不能按原样工作。 (2) 您不会收到任何电子邮件,只会收到 UID(因此邮件的大小无关紧要)。 (3) 尝试在搜索前添加“M.debug = 4” - 这将显示发送到服务器和从服务器接收到的内容。
-
WRT 限制,您只能在消息的子集内搜索,这具有相同的效果(除了您限制 maximum 结果,而不是 total 结果)。
-
感谢您的回复。我在 M.select() 之前添加了“M.debug=4”,现在一切都像以前一样发生了。该代码与 IMAP 搜索字符串相同。如果问题再次发生,我将在此处粘贴首次亮相的输出。