Cómo solucionar Python IMAP 'command CLOSE illegal in state AUTH, only allowed in states SELECTED
Problema:
Tienes código IMAP en Python similar a
imap-example.py
server = imaplib.IMAP4_SSL('imap.mydomain.com')
server.login('email@mydomain.com', 'password')
# ...
# Limpieza
server.close()pero cuando lo ejecutas, server.close() falla con un mensaje de error como
imap-traceback.txt
Traceback (most recent call last):
File "./imaptest.py", line 13, in <module>
server.close()
File "/usr/lib/python3.6/imaplib.py", line 461, in close
typ, dat = self._simple_command('CLOSE')
File "/usr/lib/python3.6/imaplib.py", line 1196, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/lib/python3.6/imaplib.py", line 944, in _command
', '.join(Commands[name])))
imaplib.error: command CLOSE illegal in state AUTH, only allowed in states SELECTEDSolución
Antes de server.close(), debes ejecutar server.select() al menos una vez. En caso de duda, simplemente server.select("INBOX") porque esto siempre funcionará.
Inserta esta línea antes de server.close():
imap-select-fix.py
server.select("INBOX")Debería verse así:
imap-fixed-example.py
server = imaplib.IMAP4_SSL('imap.mydomain.com')
server.login('email@mydomain.com', 'password')
# ...
# Limpieza
server.select("INBOX")
server.close()Para un ejemplo completo ver Ejemplo mínimo de Python IMAP sobre SSL
Echa un vistazo a artículos similares por categoría:
Python
Si este artículo te ha ayudado, considera invitarme a un café o hacer una donación vía PayPal para apoyar la investigación y publicación de nuevos artículos en TechOverflow