Foros del Web » Programando para Internet » Python »

[Aporte] Como recuperar mensajes de la bandeja de entrada.

Estas en el tema de [Aporte] Como recuperar mensajes de la bandeja de entrada. en el foro de Python en Foros del Web. Hola a todos los que leéis este subforo (mas bien pocos), tengo unas cuantas dudas acerca del tema que estáis viendo de título, os expongo. ...
  #1 (permalink)  
Antiguo 31/05/2010, 02:43
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
[Aporte] Como recuperar mensajes de la bandeja de entrada.

Hola a todos los que leéis este subforo (mas bien pocos), tengo unas cuantas dudas acerca del tema que estáis viendo de título, os expongo.

Tengo que implementar una clase que sea capaz de recuperar los mensajes de entrada de una cuenta de correo catch-all, y luego transformar los correos para que se conviertan en mensajes privados dentro de la página aunque esa parte la tengo medio resulta... Para la primera parte consistente en recuperar los mensajes he estado buscando info en la documentación de python y he encontrado que se puede realizar de dos maneras, la primera sería mediante "FeedParser API" y la segunda mediante "Parser Class API", simplemente preguntaros si alguien a hecho esto alguna vez y si es su caso cual usó de las dos apis que hay disponibles, una vez que lo tenga resuelto y programado lo subiré y lo pondré como aporte, gracias y un saludo
__________________
Antes de cambiar el mundo...dá tres vueltas por tu casa

Usa Google es tu amigo ;)

Última edición por Nekeniehl; 31/05/2010 a las 04:16
  #2 (permalink)  
Antiguo 31/05/2010, 08:44
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: [Sugerencia] Como recuperar mensajes de la bandeja de entrada.

Bueno, he seguido investigando y he dado con que no era ninguna de las apis mencionadas arriba, se tiene que trabajar con imaplib, he conseguido recoger los mensajes, solo que ahora tengo un problema tonto y es que le tengo que poner el numero a mano, no me deja recorrerlo con un bucle, para que lo entendais, aqui mi codigo:
Código Python:
Ver original
  1. mails = imaplib.IMAP4('localhost')
  2.     mails.login("user1","1234")
  3.  
  4.     total=mails.select()
  5.     for numMsg in total[1]:
  6. #        Debug (numMsg)
  7.         print 'HEADER:'
  8.         typ, msg_data = mails.fetch(numMsg, '(BODY.PEEK[HEADER])')
  9.         for response_part in msg_data:
  10.             if isinstance(response_part, tuple):
  11.                 print response_part[1]
  12.  
  13.         print 'BODY TEXT:'
  14.         typ, msg_data = mails.fetch(numMsg, '(BODY.PEEK[TEXT])')
  15.         for response_part in msg_data:
  16.             if isinstance(response_part, tuple):
  17.                 print response_part[1]
  18.  
  19.                    
  20.     mails.close()
  21.     mails.logout()
total[1] vale '2', entonces solo me saca el mensaje numero 2 :/ alguna ayuda al respecto?
__________________
Antes de cambiar el mundo...dá tres vueltas por tu casa

Usa Google es tu amigo ;)
  #3 (permalink)  
Antiguo 31/05/2010, 09:36
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: [Sugerencia] Como recuperar mensajes de la bandeja de entrada.

Ya está resuelto, aqui teneis el código:
Código Python:
Ver original
  1. def CatchAll ():
  2.     """Catch all msg from the email Catch-all"""
  3.     host=''
  4.     user=''
  5.     pwd=''
  6.     mails = imaplib.IMAP4(host)
  7.     mails.login(user,pwd)
  8.  
  9.     total=mails.select('INBOX')
  10.    
  11.     for num in range(int(total[1][0])):
  12.         print 'HEADER:'
  13.         typ, msg_data = mails.fetch(num+1, '(BODY.PEEK[HEADER])')
  14.         for response_part in msg_data:
  15.             if isinstance(response_part, tuple):
  16.                 print response_part[1]
  17.  
  18.         print 'BODY TEXT:'
  19.         typ, msg_data = mails.fetch(num+1, '(BODY.PEEK[TEXT])')
  20.         for response_part in msg_data:
  21.             if isinstance(response_part, tuple):
  22.                 print response_part[1]
  23.  
  24.                    
  25.     mails.close()
  26.     mails.logout()
__________________
Antes de cambiar el mundo...dá tres vueltas por tu casa

Usa Google es tu amigo ;)
  #4 (permalink)  
Antiguo 01/06/2010, 03:30
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: [Aporte] Como recuperar mensajes de la bandeja de entrada.

Aqui teneis la función con algunas modificaciones:

Código Python:
Ver original
  1. def CatchAll ():
  2.     """Catch all msg from the email Catch-all
  3.    Return values from, to, text, subject"""
  4.     host = cfg.get('Connection','host')
  5.     user = cfg.get('Connection','user')
  6.     pwd = cfg.get('Connection','pwd')
  7.  
  8.     mails = imaplib.IMAP4(host)
  9.     mails.login(user,pwd)
  10.     tmsg ={}
  11.     total = mails.select('INBOX')
  12.     for num in range(int(total[1][0])):
  13.         msg = {}
  14. #        Headers from the message
  15.         typ, msg_data = mails.fetch(num+1, '(BODY.PEEK[HEADER])')
  16.         fro = msg_data[0][1].split("From: ")[1].split("\r\n")[0]
  17.         msg["from"] = fro
  18.         sub = msg_data[0][1].split("Subject: ")[1].split("\r\n")[0]
  19.         msg["subject"] = sub
  20.         to = msg_data[0][1].split ("To: ")[1].split("\r\n")[0]
  21.         msg["to"] = to
  22. #        Text from the message
  23.         typ, msg_data = mails.fetch(num+1, '(BODY.PEEK[TEXT])')
  24.         text = msg_data[0][1].split("\r\n")[0]
  25.         msg["text"] = text
  26.         tmsg[num] = msg
  27.  
  28.     mails.close()
  29.     mails.logout()
  30.     return tmsg
Reeditado para que se guarden los datos en un solo diccionario y se pueda acceder atraves de una key numerica
__________________
Antes de cambiar el mundo...dá tres vueltas por tu casa

Usa Google es tu amigo ;)

Última edición por Nekeniehl; 02/06/2010 a las 09:42
  #5 (permalink)  
Antiguo 05/06/2010, 04:52
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: [Aporte] Como recuperar mensajes de la bandeja de entrada.

Hola , gracias por compartir tu codigo... Demasiado dificl de entender para mi ( solo conozco un poquito de python) Pero queria preguntarte una cosa:

Me gustaria hacer un codigo que entre en mi cuenta de correo , mire si hay mensajes nuevos, y me duevuelva Si o No.
... Tu codigo hace algo parecido o no lo he entendido bien ????
  #6 (permalink)  
Antiguo 05/06/2010, 19:12
Avatar de Nekeniehl  
Fecha de Ingreso: julio-2009
Ubicación: Berlin, Alemania / Granada, España
Mensajes: 132
Antigüedad: 14 años, 9 meses
Puntos: 6
Respuesta: [Aporte] Como recuperar mensajes de la bandeja de entrada.

Sip, el código que está puesto te devuelve directamente los mensajes que tengas en la bandeja de entrada en un diccionario, cambiando un poquito el codigo se podria hacer lo que pides..pegas:
Solo está testeado en configuración local, con postfix y con squirrelmail, lo más seguro es que no funcione con gmail ya que usa protocolo pop por ejemplo, aunque googleando un poco es fácil de encontrar, en todo caso está la estructura de como atacar el problema xD, todo sería cuestión de probar. Un saludo
__________________
Antes de cambiar el mundo...dá tres vueltas por tu casa

Usa Google es tu amigo ;)
  #7 (permalink)  
Antiguo 09/06/2010, 11:48
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: [Aporte] Como recuperar mensajes de la bandeja de entrada.

Pues he googleado pero no aparecen muchos resultados relacionados con Python-Hotmail.... Pasaré la pregunta como un nuevo post, aver si alguien sabe algo más del tema
  #8 (permalink)  
Antiguo 10/06/2010, 09:09
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [Aporte] Como recuperar mensajes de la bandeja de entrada.

GMail tiene soporte IMAP disponible

Etiquetas: bandeja, entrada, mensajes, recuperar, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:04.