Jak pokazuje poniższy komunikat o błędzie, nie mogę się zalogować, ponieważ jestem w stanie LOGOUT, a nie w stanie NONAUTH. Jak dostać się z LOGOUT do NONAUTH?Dlaczego nie mogę zalogować się do serwera IMAP dwa razy w Pythonie
Przykład poniżej (oczywiście poświadczenia logowania są sfałszowane poniżej)
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()
Dzięki! Dokładnie to! –
Podczas wyjaśniania, że stan LOGOUT jest stanem, z którego nie ma powrotu, nie wyjaśniłeś dokładnie, w jaki sposób OP przechodzi w stan NONAUTH - czy jest to stan, w którym się znajdujesz, gdy nawiązujesz połączenie IMAP? To znaczy po tym 'imaplib.IMAP4_SSL (" imap.gmail.com ", 993)'? Ale nie możesz dostać się do stanu NONAUTH z żadnego innego państwa? Nie widzę żadnego odniesienia w RFC3501. – Devy
@Devy: Nie wyjaśniłem całego stanu maszyny z RFC 3501, ponieważ RFC 3501 już to wyjaśnia. Sekcja 3 mówi: "Początkowy stan jest identyfikowany na powitanie serwera." Sekcja 3.1 mówi, "Nieuznany stan ... jest wprowadzany, gdy połączenie się rozpocznie, chyba że połączenie zostało wcześniej uwierzytelnione." W przeciwnym razie "Uwierzytelniony stan ... jest wprowadzany po uruchomieniu wstępnie uwierzytelnionego połączenia". Po wersji 3.4 znajduje się diagram ASCII-ART, który pokazuje wszystkie sposoby dotarcia do każdego stanu. Nie ma sposobu, aby powrócić do Nieuwierzytelnionego, jeśli go opuścisz. – abarnert