2012-07-31 42 views
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"'),使雙引號需要發送謝謝

回答

6

嘗試。

我懷疑imaplib沒有正確引用字符串,所以服務器得到看起來像兩個參數:[Gmail]/AllMail

+0

偉大的工程。那麼這意味着在Python 3中將每個單詞視爲不同的參數會出現問題? – 2012-07-31 16:45:19

+1

看起來這是Python3的imaplib中沒有檢測到參數需要引用的問題。一般來說,如果您的字符串除了字母和數字之外還有其他字符,最好自己引用它們。 – Max 2012-07-31 16:46:55

+0

對我來說,問題是_byte字符串vs unicode string_ one。如果你使用unicode字符串,'imaplib''不檢測它需要引用,你應該自己引用它。這是由於imaplib的''_checkquote()''方法中存在一個錯誤。作爲參考,我使用的是imaplib 2.58。 – 2013-04-05 12:06:44