2010-02-14 8 views
2

J'utilise Gmail et une application qui me notifie si j'ai reçu un nouvel email, contenant son titre dans une info-bulle. (GmailNotifier avec Miranda-IM) La plupart des courriels que je reçois sont ceux que je ne veux pas lire, et il est ennuyeux de devoir se connecter à Gmail avec une connexion lente pour supprimer ces courriels. Je crois que le plugin est une source fermée.Suppression du dernier e-mail reçu via un script Python?

J'ai essayé (sans succès) d'écrire un script qui se connectera et supprimera l'email 'top' (celui reçu le plus récemment). Cependant ce n'est pas aussi facile que je pensais que ce serait.

J'ai d'abord essayé d'utiliser imaplib, mais j'ai découvert qu'il ne contenait aucune des méthodes que j'espérais. C'est un peu comme la spécification dbapi, ne contenant que des fonctionnalités minimales, la spécification imap est modifiée. J'ai alors essayé de lire le RFC imap (rfc3501). A mi-parcours, je me suis rendu compte que je ne voulais pas écrire un client mail complet, donc j'ai décidé d'utiliser pop3 à la place. Poplib est aussi minimal mais a apparemment ce dont j'ai besoin. Cependant, pop3 ne semble pas trier les messages dans l'ordre que je connais. Je dois soit appeler top() ou retr() sur chaque e-mail pour lire les en-têtes si je veux voir la date reçue.

Je pourrais probablement itérer dans chaque en-tête de message, en cherchant la date la plus récente, mais c'est moche. Je veux éviter d'analyser toute ma boîte aux lettres si possible. Je ne veux pas non plus «pop» la boîte aux lettres et télécharger d'autres messages.

Cela fait maintenant 6 heures et je ne me sens pas plus proche d'une solution que lorsque j'ai commencé. Est-ce que je regarde quelque chose de simple? Y a-t-il une autre bibliothèque que je pourrais essayer? (J'ai trouvé un « chilkat » un, mais il est pléthorique en enfer, et j'espérais le faire avec la bibliothèque standard)

Répondre

2
import poplib 

#connect to server 
mailserver = poplib.POP3_SSL('pop.gmail.com') 
mailserver.user('recent:YOURUSERNAME') #use 'recent mode' 
mailserver.pass_('YOURPASSWORD') #consider not storing in plaintext! 

#newest email has the highest message number 
numMessages = len(mailserver.list()[1]) 

#confirm this is the right one, can comment these out later 
newestEmail = mailserver.retr(numMessages) 
print newestEmail 

#most servers will not delete until you quit 
mailserver.dele(numMessages) 
mailserver.quit() 

je travaillais avec le poplib récemment, la rédaction d'un client de messagerie très primitive. J'ai testé cela avec mon serveur de messagerie (pas Gmail) sur certains emails de test et cela a semblé fonctionner correctement. Je voudrais vous envoyer quelques emails factices pour le tester en premier.

Avertissements:

Espérons que cela aide, ça devrait être suffisant pour vous y mettre!

+0

C'est en fait identique à ce que j'avais. Mais pour une raison quelconque, Gmail n'affiche pas mes messages dans l'ordre chronologique. Dans mon cas, numMessages donne le dernier email dans la liste apparemment non ordonnée de Gmails, mais c'est un aléatoire d'il y a plus d'un an J'apprécie vraiment l'aide. Peut-être que le problème réside avec Gmail? –

+0

Après avoir ajouté du code de débogage primitif, j'ai vérifié l'horodatage des en-têtes pour chaque message. Mon compte pop Gmail n'a apparemment reçu aucun courrier depuis 2007. Je ne sais pas comment Google a implémenté son système pop3, mais il semble être buggé. Il n'y a pas de corrélation entre les emails dans mon compte pop3 et l'interface web. C'est comme si le compte pop3 en contenait la moitié et que le web en contenait l'autre moitié. –

+0

Salut Gary, Essayez d'ajouter votre nom d'utilisateur en remplaçant "recent: username" dans la ligne mailserver.user() ci-dessus. Assurez-vous également que votre compte Gmail est configuré pour autoriser POP3 dans les paramètres de configuration. Je vois ce que vous voulez dire à propos des numéros de messages "aléatoires", mais si vous lisez ici (http://mail.google.com/support/bin/answer.py?answer=47948), vous verrez que vous avez besoin utiliser "mode récent" pour que tous les messages soient disponibles. Je pense que si vous n'utilisez pas le mode récent, c'est peut-être retourner le message non lu le plus récent? C'est juste une intuition. – swanson