2013-04-19 27 views
5

Aşağıdaki hata iletisinde belirtildiği gibi oturum açamıyorum çünkü LOGOUT durumunda ve NONAUTH durumunda değilim. LOGOUT'tan NONAUTH'a nasıl ulaşırım? (Açıkçası Giriş kimlik aşağıda sahtedirler) altınaNeden bir imap sunucusuna iki kez Python'da oturum açamıyorum

Örnek

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

cevap

6

Ne yapmaya çalıştığını IMAP yasadışı. RFC 3501 üzerinden okursanız, Logout State'u geri dönüşü olmayan bir durum olarak tanımlar. imaplib'un kendisinden veya sunucudan bir hata alıp almamanız, ya da gerçekten şanssızsınız ve sizi tanımsız davranış-davranış bölgesine yönlendirir… cevap aynıdır: yapma.

Yani, artık giriş sunucuya yeni bir bağlantı oluşturmak zorunda:

>>> 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)']) 

(Tabii ki yeni bağlantı için aynı adı imap_server yeniden bağlamanız gerekmez.)

+0

Teşekkürler! Tam olarak bu! –

+0

LOGOUT durumunun geri dönüşü olmayan bir durum olduğunu açıkladığınız halde, OP'nin NONAUTH durumuna nasıl geçtiğini tam olarak açıklayamadınız - IMAP bağlantısı yaparken bulunduğunuz durum bu mu? Yani, bundan sonra imaplib.IMAP4_SSL ("imap.gmail.com", 993) '? Fakat başka bir eyaletten NONAUTH devletine ulaşamazsınız? RFC3501'de herhangi bir başvuru görmüyorum. – Devy

+0

@Devy: RFC 3501, RFC 3501'in tüm makine makinesini açıklamıyordu çünkü RFC 3501 oldukça iyi açıklıyor. Bölüm 3, "İlk durum, sunucu selamlamada tanımlanır." Bölüm 3.1, "Bağlantının önceden doğrulanmadığı sürece bir bağlantı başladığında, Kimliği Doğrulanmadı… giriliyor" diyor. Aksi takdirde, "Önceden Tanımlanmış Durum… önceden tanımlanmış bir bağlantı başladığında girilir". 3.4'ten sonra, her duruma ulaşmanın tüm yollarını gösteren bir ASCII-ART şeması vardır. Eğer bırakırsanız, Kimliği Doğrulanmamış'a dönmenin bir yolu yoktur. – abarnert

İlgili konular