Я пытаюсь получить доступ к своим письмам в Gmail из сценария python. Код, который я использую следующее:imaplib.select on large inbox: Слишком много аргументов для команды
import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login("username","password")
m.select("[Gmail]/All Mail")
При выполнении этого кода в Python 2, он отлично работает, я получаю список всех моих писем. В python 3 наведите указатель на ошибку с ошибкой
>>> m.select("[Gmail]/All Mail")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.2/imaplib.py", line 674, in select
typ, dat = self._simple_command(name, mailbox)
File "/usr/lib/python3.2/imaplib.py", line 1121, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/lib/python3.2/imaplib.py", line 957, in _command_complete
raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SELECT command error: BAD [b'[CLIENTBUG] Too many arguments for command']
Я проделал немного тестирования. Он отлично работает в другой папке, такой как «Входящие», где я получаю только 400 писем (против 6000 в «Все Mail»).
Это проблема, связанная с размером списка? Почему в python 2 и 3 он отличается?
Спасибо
Отлично работает. Значит, это означает, что в Python 3 проблема будет считаться с каждым словом в качестве другого аргумента? –
Похоже, что проблема в imaplib Python3 не обнаруживает, что аргумент нуждается в цитировании. В общем, если в ваших строках есть что-то другое, кроме букв и цифр, рекомендуется процитировать их сами. – Max
Для меня проблема была в строке _byte и unicode string_ one. Если вы используете строки unicode, '' imaplib'' не обнаруживает, что ему требуется кавычка, и вы должны процитировать его самостоятельно. Это связано с ошибкой в методе '' _checkquote() '' imaplib. Для справки, я использую imaplib 2.58. –