Trouver de nouveaux messages ajoutés à une boîte aux lettres imap depuis que j'ai vérifié avec imaplib2 python?

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

Question

Je suis en train d'écrire un programme qui surveille une boîte aux lettres IMAP et copie automatiquement chaque nouveau message entrant dans un dossier « Archive ». J'utilise imaplib2 qui implémente la commande IDLE. Voici mon programme de base:

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

Il imprime les boîtes aux lettres process () correctement et fonctionne lorsque le premier changement se produit à la boîte aux lettres. Mais la réponse récente () n'a pas de sens pour moi, et après le premier message que je ne peux plus me autres notifications.

Quelqu'un sait comment faire cela?

Était-ce utile?

La solution

Voir l'exemple et des références dans python-imap -idle-avec-imaplib2 . Le module comporte un filetage, vous devez faire attention à la synchronisation des événements.

L'exemple suggère la synchronisation avec les événements, et laisse le traitement du courrier au lecteur:

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

Prendre une indication de la question, "quelque chose de mieux" peut être:

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

Autres conseils

Je trouve que récemment () est un peu vague (ce qui est une vague IMAP, non imaplib2). Il semble préférable de conserver une liste de numéros de message avant et après ralenti, et la différence est de nouveaux messages.

Ensuite, utilisez fetch (messages, "UID") pour obtenir le uid du message.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top