En la entrada de
blog anterior se explicó como realizar envíos de correo de forma
automática a través de un script en Python. En este caso, voy a
explicar en qué consiste el protocolo IMAP (Internet Message Access
Protocol), y mostraré un ejemplo de acceso a la cuenta de correo,
búsqueda de un mensaje en la bandeja de entrada e imprimirlo en la
pantalla de la consola.
El protocolo IMAP permite acceder a mensajes de correo
electrónico que se encuentran almacenados en un servidor. A
diferencia del protocolo POP, el cual también es usado para acceder
a mensajes de correo electrónico de un servidor, permite especificar
carpetas, y visualizar los mensajes sin necesidad de descargarlos,
como en el caso de POP.
El protocolo IMAP generalmente es escuchado por el servidor en el puerto 143.
Código ejemplo
En el código que se muestra a continuación se hace uso de la
librería imaplib de Python, la cual permite conectarse a un servidor
IMAP (para este caso el de Gmail), e incluye funciones para búsqueda
y recuperación de mensajes recibidos.
En este caso, el programa ejemplo se autenticará a una cuenta de
Gmail, se dirigirá a la bandeja de entrada, y buscará los mensajes
que contengan en el campo “Asunto”, la cadena que se asigne a la
variable string_busqueda. Finalmente, contará los mensajes que
cumplen con el criterio de búsqueda, e imprimirá el más reciente
en la consola.
Se debe tener en cuenta que si el mensaje contiene imágenes o
archivos adjuntos, se mostrará el binario de los mismos,
representado en caracteres. Adicionalmente, se imprimirán encabezados
y otra información de los mensajes, la cual generalmente no se
muestra en los aplicativos Web para acceso al correo.
# vim: set fileencoding=utf-8 : # Importación de librerías import imaplib import email # Conexión a la cuenta de correo mail = imaplib.IMAP4_SSL('imap.gmail.com') # Servidor IMAP de GMAIL mail.login('pepito.perez', 'passxxx') # Usuario y contraseña # Lista mensajes de correo electrónico mail.list() # Selección de bandeja de entrada por defecto mail.select() # String de búsqueda string_busqueda="Informe" # Búsqueda de mensajes con el anterior criterio en el campo "Asunto" typ, resBusq = mail.search(None, '(ALL SUBJECT "' + string_busqueda + '")') # Se muestran resultados de la búsqueda if resBusq[0] == '': print 'No se encontraron mensajes con la cadena "%s" en asunto' % (string_busqueda) else: resBusq = resBusq[0].split(' ') print 'Se encontraron %s mensajes con la cadena "%s" en asunto' % (len(resBusq), string_busqueda) # Se recupera el mensaje más reciente que cumpla con el criterio de búsqueda typ, data = mail.fetch(resBusq[-1], '(RFC822)') # Se convierte el mensaje de String a mensaje de la clase email msg = email.message_from_string(data[0][1]) # Se imprime en pantalla el mensaje print msg # Cierra sesión en la cuenta de correo mail.logout()
En esta linea
ResponderEliminarresBusq = resBusq[0].split(' ')
me produce este error
a bytes-like object is required, not 'str'
resBusq = resBusq[0].split()
ResponderEliminar