2016-11-30 68 views
0

我編寫了一個python腳本來自動執行郵件帳戶上的一些任務。所以,我可以登錄到我的雅虎郵箱帳戶,閱讀,刪除(通過imap)和發送電子郵件(通過smtp)。之後,我想註銷。不過,我得到這個錯誤,我不知道該怎麼修復:Python imaplib:無法從imap註銷

這是發生了什麼:

Exception in close_imap 
Traceback (most recent call last): 
    File "/Users/Tom/MeineDaten/Programmieren/Sportwetten/Tipico/Report-Gambling-Apps/emailing/Mailer.py", line 55, in close_imap 
    self.imap.close() 
    File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/imaplib.py", line 445, in close 
    typ, dat = self._simple_command('CLOSE') 
    File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/imaplib.py", line 1180, in _simple_command 
    return self._command_complete(name, self._command(name, *args)) 
    File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/imaplib.py", line 928, in _command 
    ', '.join(Commands[name]))) 
imaplib.IMAP4.error: command CLOSE illegal in state LOGOUT, only allowed in states SELECTED 

這是相應的代碼:

import imaplib 

...other code here... 

def close_imap(self): 
    if self.imap is None: 
     print("close_imap: self.imap is None. No further action taken. Returning.") 
     return 
    try: 
     self.imap.close() 
     self.imap.logout() 
    except Exception: 
     print("Exception in close_imap") 
     print(str(traceback.format_exc())) 
     pass 

我是什麼在這裏做錯了嗎?

+0

看看traceback:'File「/path/to/my/python/project/emailing/Mailer.py」,第55行,在close_imap'' self.imap.select('INBOX')'。錯誤追加在'self.imap.select('INBOX')行'這行不在你給的例子中。兩種解決方案:你不給出你正在掙扎的真實代碼,或者你沒有執行這個腳本,而是另一個(pyc問題?)。 – Arount

+0

初始問這個問題時,我添加了一個錯誤的堆棧跟蹤。我用另一個堆棧跟蹤更新了這個問題。對不起,但thx的答案 – toom

+1

好吧,我想你關閉了兩次連接,你可以發佈所有的代碼? – Arount

回答

0

您正在嘗試關閉文件夾,但尚未選擇任何文件夾。

這可能是由於以下兩個認爲:

  • 你永遠不會選擇一個文件夾,在這個環節中
  • 你已經關閉了文件夾,但你試圖關閉它第二次。

您應該只關閉一次文件夾。

注意:這在IMAP協議中不需要在註銷之前關閉文件夾。