Encuentra nuevos mensajes añadidos a un buzón de correo IMAP desde la última vez comprobado con imaplib2 pitón?

StackOverflow https://stackoverflow.com/questions/2047067

Pregunta

Estoy tratando de escribir un programa que controla un buzón de correo IMAP y copia automáticamente cada nuevo mensaje entrante en una carpeta "Archivo". Estoy usando imaplib2 que implementa el comando IDLE. Aquí está mi programa básico:

M = imaplib2.IMAP4("mail.me.com")
M.login(username,password)
lst = M.list()
assert lst[0]=='OK'
for mbx in lst[1]:
    print "Mailboxes:",mbx

def process(m):
    print "m=",m
    res = M.recent()
    print res


M.select('INBOX')
M.examine(mailbox='INBOX',callback=process)
while True:
    print "Calling idle..."
    M.idle()
    print "back from idle"
M.close()
M.logout()

Se imprime los buzones correctamente y el proceso () se ejecuta cuando el primer cambio se produce en el buzón. Pero la respuesta de reciente () no tiene sentido para mí, y después del primer mensaje nunca consigo cualquier otra notificación.

Alguien sabe cómo hacer esto?

¿Fue útil?

Solución

Vea el ejemplo y referencias en pitón-IMAP -idle-con-imaplib2 . El módulo consiste en introducir, se debe prestar atención a la sincronización de eventos.

El ejemplo sugiere la sincronización con los eventos, y deja de procesamiento de correo para el lector:

# The method that gets called when a new email arrives. 
# Replace it with something better.
def dosync(self):
    print "Got an event!"

Tomando un indicio de la cuestión, "algo mejor" puede ser:

# Replaced with something better.
def dosync(self):
    print "Got an event!"
    res = self.M.recent()
    print res

Otros consejos

Estoy descubriendo que reciente () es un poco vago (esto es una vaguedad IMAP, no imaplib2). Parece mejor mantener una lista de los números de aviso antes y después de la inactividad, y la diferencia es los mensajes nuevos.

A continuación, utilice fetch (mensajes, "UID") para obtener el UID del mensaje.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top