3
我想從一個python腳本訪問我在Gmail中的電子郵件。我使用的代碼如下:imaplib.select在大型收件箱中:命令參數太多
import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login("username","password")
m.select("[Gmail]/All Mail")
當運行在Python 2的代碼,它工作正常,我讓我所有的電子郵件列表。在蟒蛇3 hoverer它失敗與錯誤
>>> 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)。
這是一個與列表大小有關的問題嗎?爲什麼它在Python 2和Python 3中有所不同?
使用m.select('"[Gmail]/All Mail"')
,使雙引號需要發送謝謝
偉大的工程。那麼這意味着在Python 3中將每個單詞視爲不同的參數會出現問題? – 2012-07-31 16:45:19
看起來這是Python3的imaplib中沒有檢測到參數需要引用的問題。一般來說,如果您的字符串除了字母和數字之外還有其他字符,最好自己引用它們。 – Max 2012-07-31 16:46:55
對我來說,問題是_byte字符串vs unicode string_ one。如果你使用unicode字符串,'imaplib''不檢測它需要引用,你應該自己引用它。這是由於imaplib的''_checkquote()''方法中存在一個錯誤。作爲參考,我使用的是imaplib 2.58。 – 2013-04-05 12:06:44