imaplib“close”&的实用价值是什么? “退出”?

时间:2018-02-01 20:47:15

标签: 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')

有人可以告诉我以下陈述实际上做了什么吗?

mail.close()
mail.logout()

分别根据他们documentation

“关闭当前选定的邮箱”

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

但是,“关闭”邮箱并“关闭”连接意味着什么?我的意思是,这些行动有什么意义或好处?您能举例说明这些陈述实际上是否必要?

我问这个问题,因为我注意到我的脚本中是否添加或删除了这两行完全没有区别。所以,我想更好地理解他们的目的。

1 个答案:

答案 0 :(得分:1)

如果您在客户端或服务器上发现任何更改,无论是否有最后两个语句,您仍然应该调用它们。 The IMAP spec包含一个方便的图表,概述了IMAP连接的生命周期(从该链接向上滚动一页):

               +----------------------+
               |connection established|
               +----------------------+
                          ||
                          \/
        +--------------------------------------+
        |          server greeting             |
        +--------------------------------------+
                  || (1)       || (2)        || (3)
                  \/           ||            ||
        +-----------------+    ||            ||
        |Not Authenticated|    ||            ||
        +-----------------+    ||            ||
         || (7)   || (4)       ||            ||
         ||       \/           \/            ||
         ||     +----------------+           ||
         ||     | Authenticated  |<=++       ||
         ||     +----------------+  ||       ||
         ||       || (7)   || (5)   || (6)   ||
         ||       ||       \/       ||       ||
         ||       ||    +--------+  ||       ||
         ||       ||    |Selected|==++       ||
         ||       ||    +--------+           ||
         ||       ||       || (7)            ||
         \/       \/       \/                \/
        +--------------------------------------+
        |               Logout                 |
        +--------------------------------------+
                          ||
                          \/
            +-------------------------------+
            |both sides close the connection|
            +-------------------------------+

     (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

该规范进一步详细说明了当行为不端的客户与他们交谈时服务器如何尝试表现,但最安全的做法就是遵循规范。

如果由于某种原因你坚决反对手动完成IMAP连接而不是退出脚本,那么你必须检查你正在与之交谈的IMAP服务器的实现,以确切了解它如何处理这种情况(我认为可以总结为“优雅”,但依靠这种行为仍然是一个坏主意。)