Ответ 1
Проблема с первой учетной записью электронной почты связана с количеством писем в ней?
Не прямо, но да, в значительной степени. Проблема заключается в том, что вы пытаетесь сразу загрузить весь список из 9000 сообщений.
Отправка смехотворно длинных строк была полезной DoS-атакой, а для программ, реализованных на C, а не Python, переполнение буфера на многие сетевые клиенты и серверы. Он также может быть очень медленным и забивать сеть. Но обратите внимание, что RFC был в последний раз обновлен в 1999 году, а imaplib
был написан в 1997 году, поэтому границы "смешного", возможно, изменились с тех пор.
Правильный способ решить эту проблему, согласно RFC 2683, - это не пытаться это сделать. (См. Особенно раздел 3.2.1.5.)
Есть ли какой-то параметр по умолчанию, который реализует ограничение по размеру?
Да. Он не указан в документах, но поскольку RFC рекомендует ограничение в 8000 байт, и это позволяет 10000, я думаю, это разумно.
Как я могу обойти ошибку и прочитать мои письма?
Опять же, что вам нужно сделать, это разбить это на более мелкие.
Но так долго у gmail нет проблем с поиском, это большое, и вы счастливы, что компьютер и сетевое соединение немного лучше, чем стандарт конца 90-х, вы, вероятно, можете избежать проблем с проблемой.
К счастью, как и многие из модулей в stdlib, imaplib
написано так, чтобы быть полезным примером кода, который будет использоваться в качестве модуля. Вы всегда можете сказать, что это так, потому что документация ссылается на источник справа вверху.
Итак, если вы посмотрите, вы увидите не далеко от вершины:
# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1)
# don't specify a line length. RFC 2683 however suggests limiting client
# command lines to 1000 octets and server command lines to 8000 octets.
# We have selected 10000 for some extra margin and since that is supposedly
# also what UW and Panda IMAP does.
_MAXLINE = 10000
Итак, если вы хотите переопределить это, вы можете разветкить модуль (сохранить imaplib.py
как myimaplib.py
и использовать это вместо этого), или вы можете просто обезвредить его во время выполнения:
import imaplib
imaplib._MAXLINE = 40000
Конечно, вам нужно будет выбрать номер, который, по вашему мнению, лучше отражает край нелепости в 2014 году.