Какова практическая ценность 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()
Согласно документации они соответственно:
"закрыть выбранный почтовый ящик"
а также
msgstr "отключить соединение с сервером; возвращает ответ сервера BYE."
Но что значит "закрыть" почтовый ящик и "отключить" соединение? Я имею в виду, какой смысл или польза от этих действий? Можете ли вы привести пример, где эти заявления были бы действительно необходимы?
Я задаю этот вопрос, потому что я не вижу абсолютно никакой разницы в моем сценарии, добавлены или удалены эти две строки. Итак, я хотел бы лучше понять их цель.
1 ответ
Если вы не можете заметить какие-либо изменения на своем клиенте или сервере с этими двумя утверждениями или без них, вам все равно следует их вызвать. Спецификация IMAP включает в себя удобную диаграмму, описывающую жизненный цикл соединения 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, с которым вы разговаривали, чтобы выяснить, как именно он справляется с этой ситуацией (что, как я полагаю) можно было бы изобразить "изящно", но полагаться на такое поведение по-прежнему плохо).