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?
- Mostrar solo un correo electrónico recibido una vez hasta que se reciba uno nuevo
- Solo muestre el nuevo una vez
- 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)