2013-04-19 3 views
5

아래의 오류 메시지는 상태가 NONAUTH가 아닌 LOGOUT 상태이므로 로그인 할 수 없습니다. LOGOUT에서 NONAUTH로 어떻게 이동합니까? (분명히 로그인 자격 증명 아래 위조하는) 아래왜 파이썬에서 imap 서버에 두 번 로그인 할 수 없습니까?

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() 

답변

6

당신이 할하려는 것은 IMAP에서 불법입니다. RFC 3501을 읽으면 명시 적으로 반환이없는 상태로 Logout State을 정의합니다. imaplib에서 오류가 발생 했든 서버에서 오류가 발생 했든 실제로는 불행 해지고 작동하여 정의되지 않은 동작 영역으로 이동합니다 ... 대답은 동일합니다.하지 마십시오.

그래서, 당신은 다시 로그인 서버에 새 연결을 만들 수 있습니다

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

(물론 새 연결에 같은 이름 imap_server를 리 바인드 할 필요가 없습니다.)

+0

감사! 그게 다야! –

+0

LOGOUT 상태가 복귀가없는 상태라고 설명했지만 OP가 NONAUTH 상태로 어떻게 바뀌는 지 정확히 설명하지 않았습니다. IMAP 연결을 만들 때의 상태입니까? 즉,이'imaplib.IMAP4_SSL ("imap.gmail.com", 993)'뒤에? 그러나 다른 어느 주에서나 NONAUTH 상태가 될 수는 없습니까? RFC3501에 어떤 참조도 보이지 않습니다. – Devy

+0

@Devy : RFC 3501에 이미 설명되어 있기 때문에 RFC 3501에서 전체 상태 시스템을 설명하지 않았습니다. 섹션 3은 "초기 상태는 서버 인사말에서 확인됩니다."라고 말합니다. 섹션 3.1은 연결이 사전 인증되지 않은 경우 연결이 시작될 때 "인증되지 않은 상태 ..."라고 표시됩니다. 그렇지 않으면 "인증 상태 ... 미리 인증 된 연결이 시작되면 입력됩니다". 3.4 이후에 각 상태에 도달하는 모든 방법을 보여주는 ASCII-ART 다이어그램이 있습니다. 퇴사 한 경우 인증되지 않음으로 돌아갈 방법이 없습니다. – abarnert

관련 문제