python - 为什么我不能在 Python 中登录 imap 服务器两次

标签 python imap imaplib

正如下面的错误消息所述,我无法登录,因为我处于 LOGOUT 状态而不是 NONAUTH 状态。如何从 LOGOUT 到 NONAUTH?

下面的例子(显然下面的登录凭证是伪造的)

Python 2.7.3 (default, Aug  1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import imaplib
>>> imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993)
>>> imap_server.login('something@myserver.com', 'mypassword')
('OK', ['something@myserver.com Joe Smith authenticated (Success)'])
>>> imap_server.logout()
('BYE', ['LOGOUT Requested'])
>>> imap_server.login('something@myserver.com', 'mypassword')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/imaplib.py", line 505, in login
    typ, dat = self._simple_command('LOGIN', user, self._quote(password))
  File "/usr/lib/python2.7/imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python2.7/imaplib.py", line 825, in _command
    ', '.join(Commands[name])))
imaplib.error: command LOGIN illegal in state LOGOUT, only allowed in states NONAUTH
>>> quit()

最佳答案

您尝试执行的操作在 IMAP 中是非法的。如果你仔细阅读 RFC 3501 , 它明确定义了 Logout State作为一种没有返回的状态。无论您是从 imaplib 本身还是从服务器收到错误,还是您真的很不走运,它起作用并将您带入未定义的行为领域……答案都是一样的:不要这样做。

因此,您必须创建到服务器的新连接才能再次登录:

>>> imap_server.logout()
('BYE', ['LOGOUT Requested'])
>>> imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993)
>>> imap_server.login('something@myserver.com', 'mypassword')
('OK', ['something@myserver.com Joe Smith authenticated (Success)'])

(当然你不必重新绑定(bind)同名imap_server到新的连接。)

关于python - 为什么我不能在 Python 中登录 imap 服务器两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16112695/

相关文章:

Python JSON 解码得到错误的值

python - 获取邮件未读内容,不影响未读状态

python - IMAP 获取正文太慢

python - 将函数链接为 python 中的 shell 管道命令

python - 如何比较hdfs文件和unix文件?

python - 异常训练Resnet50 : "The shape of the input to "Flatten"is not fully defined"

Ruby IMAP 库 : How can I show all messages in a folder?

go - 如何从 Go 中的 imap 服务器获取正文

python - 从 Python 连接到 Gmail