2016-08-24 2085 views
1
def connect_imap(): 
    m = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
    print("{0} Connecting to mailbox via IMAP...".format(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S"))) 
    details = login_credentials() 
    m.login(details[0], details[1]) 
    return m 


m = connect_imap() 
typ, data = m.search(None, 'ALL') 
m.close() 
m.logout() 

上述代碼的輸出是:imaplib.error:命令搜索狀態AUTH非法的,只允許在狀態來選擇

2016-08-24 10:55:34 Connecting to mailbox via IMAP... 
    Traceback (most recent call last): 
     File "/home/zoikmail/Desktop/test.py", line 25, in <module> 
     typ, data = m.search(None, 'ALL') 
     File "/usr/lib/python2.7/imaplib.py", line 640, in search 
     typ, dat = self._simple_command(name, *criteria) 
     File "/usr/lib/python2.7/imaplib.py", line 1088, in _simple_command 
     return self._command_complete(name, self._command(name, *args)) 
     File "/usr/lib/python2.7/imaplib.py", line 838, in _command 
     ', '.join(Commands[name]))) 
    imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED 
    [Finished in 1.2s with exit code 1] 
    [shell_cmd: python -u "/home/zoikmail/Desktop/test.py"] 
    [dir: /home/zoikmail/Desktop] 
    [path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games] 

什麼是錯在上面的代碼?

+0

得到了答案,您必須先執行'imap4.select()',然後只有您可以執行'imap4.search()' – user5319825

回答

2

成功連接到IMAP服務器後,您需要選擇一個郵箱。 使用

m.select() 

連接後和搜索前。

+1

加上,檢查'm.select()'的結果。使用不存在的IMAP文件夾調用它不會引發異常。 –