leer electronico correo con python email while-loop imap python-2.x

python - electronico - ¿Cómo puedo hacer que mi correo electrónico se muestre solo una vez por correo electrónico?



leer correo con python (2)

He estado haciendo un script de Python que busca correos electrónicos desde el inicio de sesión. Aquí está mi código hasta ahora:

#!/usr/bin/python import imaplib, getpass mail = imaplib.IMAP4_SSL(''imap.gmail.com'') u = raw_input(''Your Gmail Address: '') p = getpass.getpass() mail.login(u, p) mail.select("inbox") while 1: r, data = mail.search(None, "ALL") ids = data[0] id_list = ids.split() latest_email_id = id_list[-1] r, data = mail.fetch(latest_email_id, "(RFC822)") raw_email = data[0][1] print raw_email

El problema es que sigue mostrando el mismo correo electrónico una y otra vez (hasta que se recibe uno nuevo) debido al ciclo while.

¿Cómo puedo hacerlo?

  1. Mostrar solo un correo electrónico recibido una vez hasta que se reciba uno nuevo
  2. Solo muestre el nuevo una vez
  3. Repite para siempre

Así que, básicamente, desea desarrollar un oyente de correo electrónico ... En el siguiente código, simplemente descargaré los correos electrónicos no vistos, de modo que solo tengamos los datos relevantes. Luego, una vez que se busca un correo electrónico, lo marque como "leído", por lo que su identificación no volverá a aparecer:

while 1: r, search_data = mail.search(None, "UNSEEN") #gets only the unseen emails ids = data[0] id_list = ids.split() latest_email_id = id_list[-1] r, data = mail.fetch(latest_email_id, "(RFC822)") raw_email = data[0][1] print raw_email mail.store(search_data[0].replace('' '','',''),''+FLAGS'',''/Seen'') #marks as read

Ahora, al menos su código no imprimirá el mismo correo electrónico una y otra vez. IMAP es generalmente más confiable que POP3 para obtener nuevos correos electrónicos rápidamente. Aún así, puede llevar algo de tiempo.


He encontrado una solución:

list = [] while 1: mail.select(''inbox'') r, data = mail.search(None, "ALL") ids = data[0] id_list = ids.split() latest_email_id = id_list[-1] r, data = mail.fetch(latest_email_id, "(RFC822)") raw_email = data[0][1] if not raw_email in list: print raw_email list.append(raw_email)

Básicamente, crea una lista llamada list :

list = []

Y luego, en el ciclo, es más o menos el mismo, excepto que al principio, comprueba el buzón de nuevo:

while 1: mail.select(''inbox'')

Y luego, al final, print raw_email si no está en la list y luego lo agrega a la list para que no se print nuevamente:

if not raw_email in list: print raw_email list.append(raw_email)