imaplib "close" & "logout" 的实用价值是多少?
What is the practical value of imaplib "close" & "logout"?
我有一个 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他们分别是:
"close currently selected mailbox"
和
"shutdown connection to server; returns server BYE response."
但是,"close" 邮箱和 "shutdown" 连接是什么意思?我的意思是,这些行动的意义或好处是什么?您能否举例说明这些陈述实际上是必要的?
我问这个问题是因为我注意到无论添加还是删除这两行,我的脚本都没有任何区别。所以,我想更好地了解他们的目的。
如果无论有没有最后两个语句,您都无法注意到客户端或服务器上的任何变化,您仍然应该调用它们。 The IMAP spec 包括一个概述 IMAP 连接生命周期的便捷图表(从该 link 向上滚动一页):
+----------------------+
|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 服务器的实现,以弄清楚它是如何处理的情况(我认为可以概括为“优雅地”,但依赖这种行为仍然是一个坏主意)。
我有一个 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他们分别是:
"close currently selected mailbox"
和
"shutdown connection to server; returns server BYE response."
但是,"close" 邮箱和 "shutdown" 连接是什么意思?我的意思是,这些行动的意义或好处是什么?您能否举例说明这些陈述实际上是必要的?
我问这个问题是因为我注意到无论添加还是删除这两行,我的脚本都没有任何区别。所以,我想更好地了解他们的目的。
如果无论有没有最后两个语句,您都无法注意到客户端或服务器上的任何变化,您仍然应该调用它们。 The IMAP spec 包括一个概述 IMAP 连接生命周期的便捷图表(从该 link 向上滚动一页):
+----------------------+
|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 服务器的实现,以弄清楚它是如何处理的情况(我认为可以概括为“优雅地”,但依赖这种行为仍然是一个坏主意)。