Wie die folgende Fehlermeldung besagt, kann ich mich nicht anmelden, weil ich im Status LOGOUT bin und nicht im Status NONAUTH. Wie komme ich von LOGOUT zu NONAUTH?Warum kann ich mich nicht zweimal an einem Imap-Server in Python anmelden
Beispiel unten (natürlich die Anmeldeinformationen unter gefälscht sind)
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('[email protected]', 'mypassword')
('OK', ['[email protected] Joe Smith authenticated (Success)'])
>>> imap_server.logout()
('BYE', ['LOGOUT Requested'])
>>> imap_server.login('[email protected]', '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()
Vielen Dank! Das ist es genau! –
Während Sie erklärt haben, dass der LOGOUT-Status ein Zustand ist, aus dem es keine Rückgabe gibt, haben Sie nicht genau erklärt, wie der OP in den Zustand NONAUTH übergeht - ist das der Zustand, in dem Sie sich befinden, wenn Sie eine IMAP-Verbindung herstellen? Das heißt, nach diesem 'imaplib.IMAP4_SSL ("imap.gmail.com", 993) '? Aber Sie können nicht aus einem anderen Staat in den Staat NONAUTH gelangen? Ich sehe keine Referenz in RFC3501. – Devy
@Devy: Ich habe nicht die gesamte Zustandsmaschine von RFC 3501 erklärt, weil RFC 3501 es schon ziemlich gut erklärt. Abschnitt 3 sagt: "Der Anfangszustand wird in der Serverbegrüßung identifiziert." Abschnitt 3.1 sagt, "Nicht authentifizierter Status ... wird eingegeben, wenn eine Verbindung gestartet wird, es sei denn, die Verbindung wurde vorab authentifiziert." Andernfalls wird "Authentifizierter Status ... eingegeben, wenn eine vorab authentifizierte Verbindung gestartet wird". Nach 3.4 gibt es ein ASCII-ART-Diagramm, das alle Möglichkeiten zeigt, zu jedem Zustand zu gelangen. Es gibt keine Möglichkeit, zu "Nicht authentifiziert" zurückzukehren, wenn Sie es verlassen. – abarnert