2016-11-19 109 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的可能导致具有一些或没有标记为已删除要删除的消息的 。在任何情况下,服务器可能 删除以删除没有标明任何消息。