34 votes

Vérifier le nombre de messages Gmail non lus avec Python

Comment puis-je vérifier le nombre de messages Gmail non lus dans ma boîte de réception avec un court script Python? Points bonus pour récupérer le mot de passe d'un fichier.

55voto

Avadhesh Points 1819
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login('username','password')
obj.select()
obj.search(None,'UnSeen')

25voto

Nadia Alramli Points 40381

Je vous conseille d'utiliser le flux atomique de Gmail

C'est aussi simple que cela:

 import urllib

url = 'https://mail.google.com/mail/feed/atom/'
opener = urllib.FancyURLopener()
f = opener.open(url)
feed = f.read()
 

Vous pouvez ensuite utiliser la fonction d'analyse de fil dans ce bel article: Consultez Gmail de manière pythonique.

25voto

Matthew Flaschen Points 131723

Bien, je vais aller de l'avant et épeler une solution imaplib comme Cletus a suggéré. Je ne vois pas pourquoi les gens ressentent le besoin d'utiliser gmail.py ou Atom pour cela. Ce genre de chose est ce pour quoi IMAP a été conçu. Gmail.py est particulièrement flagrant, car il analyse en fait le code HTML de Gmail. Cela peut être nécessaire pour certaines choses, mais pas pour compter le nombre de messages!

 import imaplib, re
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login(username, password)
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
 

La pré-compilation de la regex peut améliorer légèrement les performances.

7voto

PaulF Points 59

Pour une implémentation complète de la lecture de la valeur du flux d’atomes:

 import urllib2
import base64
from xml.dom.minidom import parse

def gmail_unread_count(user, password):
    """
        Takes a Gmail user name and password and returns the unread
        messages count as an integer.
    """
    # Build the authentication string
    b64auth = base64.encodestring("%s:%s" % (user, password))
    auth = "Basic " + b64auth

    # Build the request
    req = urllib2.Request("https://mail.google.com/mail/feed/atom/")
    req.add_header("Authorization", auth)
    handle = urllib2.urlopen(req)

    # Build an XML dom tree of the feed
    dom = parse(handle)
    handle.close()

    # Get the "fullcount" xml object
    count_obj = dom.getElementsByTagName("fullcount")[0]
    # get its text and convert it to an integer
    return int(count_obj.firstChild.wholeText)
 

6voto

cletus Points 276888

Ce n’est pas un extrait de code, mais j’imagine que l’utilisation d’ imaplib et les instructions IMAP de Gmail vous permettent d’atteindre la plupart du temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X