Suchen Sie neue Nachrichten, die zu einem IMAP -Mailbox hinzugefügt wurden, da ich das letzte Mal mit Python iMaplib2 überprüft habe?

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

Frage

Ich versuche ein Programm zu schreiben, das eine IMAP -Mailbox überwacht und jede neue eingehende Nachricht automatisch in einen "Archiv" -Fordner kopiert. Ich verwende IMAPLIB2, das den Idle -Befehl implementiert. Hier ist mein grundlegendes Programm:

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()

Es druckt die Postfächer ordnungsgemäß aus und läuft den Prozess () aus, wenn die erste Änderung in der Mailbox stattfindet. Aber die Antwort von neuem () macht für mich keinen Sinn, und nach der ersten Nachricht bekomme ich nie andere Benachrichtigungen.

Weiß jemand, wie man das macht?

War es hilfreich?

Lösung

Siehe Beispiel und Referenzen in Python-Imap-idle-mit-Imaplib2. Das Modul umfasst Threading, Sie sollten auf die Ereignissynchronisation achten.

Das Beispiel schlägt die Synchronisierung mit Ereignissen vor und überlässt die E -Mail -Verarbeitung an den Leser:

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

Einen Hinweis auf die Frage nehmen, "etwas Besseres" kann sein:

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

Andere Tipps

Ich finde, dass neuer () ein bisschen vage ist (dies ist eine IMAP -Unbestimmtheit, nicht IMAPLIB2). Scheint besser vor und nach dem Leerlauf eine Liste von Nachrichtennummern zu führen, und der Unterschied sind neue Nachrichten.

Verwenden Sie dann Fetch (Nachrichten, "UID"), um die Nachricht UID zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top