2016-11-19 73 views
0

我注意到pop3.quit()會將電子郵件標記爲「讀取」或「刪除」或類似的東西(即,我有一個腳本讀取電子郵件並在文件末尾運行pop3.quit() ,這會阻止在該會話期間讀取的電子郵件被再次讀取。)pop3.quit()vs pop3.close()沒有正確記錄,有什麼區別?

我也有一個運行pop3.close()的腳本,由於某種原因,這允許在腳本發出後再次讀取電子郵件退出。

這些差異記錄在哪裏?在3.5文檔pop3.close()甚至沒有記錄......

我的劇本目前在移植到IMAP,因爲我是磨砂的,但暫時誰能提供的詳細說明退出和關閉的區別?

回答

0

唯一的區別是quit也發送QUIT命令到電子郵件服務器。

你可以在源碼here上看到它。

0

查看源:https://hg.python.org/cpython/file/tip/Lib/poplib.py#l272

def quit(self): 
    """Signoff: commit changes on server, unlock mailbox, close connection.""" 
    resp = self._shortcmd('QUIT') 
    self.close() 
    return resp 

def close(self): 
    """Close the connection without assuming anything about it.""" 
    try: 
     file = self.file 
     self.file = None 
     if file is not None: 
      file.close() 
    finally: 
     sock = self.sock 
     self.sock = None 
     if sock is not None: 
      try: 
       sock.shutdown(socket.SHUT_RDWR) 
      except OSError as e: 
       # The server might already have closed the connection 
       if e.errno != errno.ENOTCONN: 
        raise 
      finally: 
       sock.close() 

所以它發送一個QUIT命令,這是在RFC中描述:https://www.ietf.org/rfc/rfc1939.txt

當客戶端從交易狀態發出QUIT命令, POP3會話進入UPDATE狀態。

POP3服務器將從maildrop中刪除標記爲已刪除 的所有消息並回復此操作的狀態。如果有錯誤,諸如資源短缺 ,遇到的同時去除消息,則 maildrop的可能導致具有一些或沒有標記爲已刪除要刪除的消息的 。在任何情況下,服務器可能 刪除以刪除沒有標明任何消息。