imaplib“关闭”和“注销”的实用价值是什么?

Cri*_*ets 2 python imaplib

我有一个 Python 脚本,它每隔几秒循环检查一次我的电子邮件中是否有新电子邮件while

我通过imaplib以下方式使用该库连接到我的电子邮件服务器(以下代码位于循环顶部while):

import imaplib
mail = imaplib.IMAP4_SSL(IMAPSERVER)
mail.login(userName, password)
mail.select(theFolderName, True)
return_code, mail_ids = mail.search(None, 'UnSeen')
Run Code Online (Sandbox Code Playgroud)

有人能告诉我以下语句实际上是做什么的吗?

mail.close()
mail.logout()
Run Code Online (Sandbox Code Playgroud)

根据文件,他们分别:

“关闭当前选择的邮箱”

“关闭与服务器的连接;返回服务器再见响应。”

但是,“关闭”邮箱和“关闭”连接是什么意思?我的意思是,这些行动的意义或好处是什么?您能否提供一个例子来说明这些陈述实际上是必要的?

我问这个问题是因为我注意到无论添加还是删除这两行,我的脚本中绝对没有任何区别。所以,我想更好地了解他们的目的。

sup*_*654 5

如果无论有或没有最后两条语句,您都无法注意到客户端或服务器上的任何更改,您仍然应该调用它们。IMAP 规范包括一个方便的图表,概述了 IMAP 连接的生命周期(从该链接向上滚动一页):

               +----------------------+
Run Code Online (Sandbox Code Playgroud)
               |connection established|
               +----------------------+
                          ||
                          \/
        +--------------------------------------+
        |          server greeting             |
        +--------------------------------------+
                  || (1)       || (2)        || (3)
                  \/           ||            ||
        +-----------------+    ||            ||
        |Not Authenticated|    ||            ||
        +-----------------+    ||            ||
         || (7)   || (4)       ||            ||
         ||       \/           \/            ||
         ||     +----------------+           ||
         ||     | Authenticated  |<=++       ||
         ||     +----------------+  ||       ||
         ||       || (7)   || (5)   || (6)   ||
         ||       ||       \/       ||       ||
         ||       ||    +--------+  ||       ||
         ||       ||    |Selected|==++       ||
         ||       ||    +--------+           ||
         ||       ||       || (7)            ||
         \/       \/       \/                \/
        +--------------------------------------+
        |               Logout                 |
        +--------------------------------------+
                          ||
                          \/
            +-------------------------------+
            |both sides close the connection|
            +-------------------------------+
Run Code Online (Sandbox Code Playgroud)
     (1) connection without pre-authentication (OK greeting)
     (2) pre-authenticated connection (PREAUTH greeting)
     (3) rejected connection (BYE greeting)
     (4) successful LOGIN or AUTHENTICATE command
     (5) successful SELECT or EXAMINE command
     (6) CLOSE command, or failed SELECT or EXAMINE command
     (7) LOGOUT command, server shutdown, or connection closed
Run Code Online (Sandbox Code Playgroud)

该规范进一步详细介绍了当行为不当的客户端与服务器交谈时服务器如何尝试采取行动,但最安全的做法就是遵循规范。

如果由于某种原因您坚决反对手动完成 IMAP 连接而不是直接退出脚本,那么您必须检查您正在交谈的 IMAP 服务器的实现,以弄清楚它如何处理这种情况(我假设是这样)可以概括为“优雅地”,但依赖这种行为仍然是一个坏主意)。