Come abilito la notifica push per IMAP (Gmail) utilizzando Python imaplib?
Domanda
Esiste un modo per monitorare un account Gmail usando imaplib senza eseguire il polling di Gmail ogni volta che voglio vedere se ci sono nuovi messaggi. O in altre parole, voglio solo che lo script riceva una notifica di un nuovo messaggio in modo da poterlo elaborare immediatamente anziché qualsiasi intervallo di tempo tra i sondaggi.
Vedo che il protocollo IMAP supporta questo con il comando IDLE, ma non riesco a vedere nulla documentato con esso nei documenti imaplib, quindi qualsiasi aiuto con questo sarebbe fantastico!
Soluzione
Non c'è qualcosa in imaplib che lo faccia, AFAIK (rivelatore: so molto poco di Python), tuttavia, sembra che qualcuno abbia implementato un'estensione IDLE per Python che ha la stessa interfaccia di imaplib (che puoi scambiare senza modifiche al codice esistente, a quanto pare):
Altri suggerimenti
Scopri ProcImap . È un framework più astratto su libimap e libimap2, che fornisce una buona soluzione per gestire i servizi IMAP. Sembra proprio quello che stai cercando, e anche per me. Sto avendo lo stesso problema con te e ho appena trovato ProcImap. Lo proverò da solo.
Questo link mostra un esempio dell'uso di IMAP IDLE: http://blog.timstoop.nl/2009/03/11/python-imap-idle-with-imaplib2/
Utilizza la stessa libreria collegata nella risposta di casperOne (imaplib2).
Esiste una semplice patch proposta in bugs.python.org implementando RFC 2177 IMLE IDAP comando in modo sincrono (per attendere più di 1 server IMAP è necessario utilizzare thread o altri mezzi di esecuzione parallela). Utilizza stdlib select per attendere sul socket incluso il timeout. Questa patch eventualmente verrà aggiunta a stdlib, ma i test devono essere scritti per primi . Il comando IDLE è ciò che necessità per la notifica push IMAP di Gmail. Spero che questo possa aiutare :)