Come posso controllare il numero di messaggi Gmail non letti nella mia casella di posta con un breve script Python? Punti bonus per il recupero della password da un file.Controllare il conteggio non letto dei messaggi di Gmail con Python
risposta
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com','993')
obj.login('username','password')
obj.select()
obj.search(None,'UnSeen')
Beh, non si tratta di un frammento di codice ma immagino di utilizzare imaplib e il numero Gmail IMAP instructions di ottenere la maggior parte del modo lì.
Usa Gmail.py
file = open("filename","r")
usr = file.readline()
pwd = file.readline()
gmail = GmailClient()
gmail.login(usr, pwd)
unreadMail = gmail.get_inbox_conversations(is_unread=True)
print unreadMail
Ottiene le informazioni di login da un file di testo assumendo il nome utente e la password sono su righe separate.
ho controllato la fonte modulo, ciò che fa gmail aperto in modalità html e analizzare la pagina. Questo non va bene! http://www.holovaty.com/code/gmail.py –
readline include una nuova riga finale, che non vuoi qui. –
Nadia ha ragione. Ciò sprecherà tempo e larghezza di banda significativi. Misura –
io consiglio di utilizzare Gmail atom feed
E 'semplice come questo:
import urllib
url = 'https://mail.google.com/mail/feed/atom/'
opener = urllib.FancyURLopener()
f = opener.open(url)
feed = f.read()
È quindi possibile utilizzare la funzione di avanzamento parse in questo bell'articolo: Check Gmail the pythonic way
+1 bella soluzione che evita tutto il business imap/pop! –
Cosa c'è di male in IMAP? Nota che questo frammento non è completo, nonostante il "semplice come questo". –
Si noti inoltre che questa soluzione richiederà all'utente il nome utente e la password sul TTY. Tuttavia, puoi creare una sottoclasse di opener per gestirlo. –
Una volta effettuato l'accesso in (fai questo manualmente o con gmail.py) dovresti usare il feed.
E si trova qui: http://mail.google.com/mail/feed/atom
E 'il modo in cui Google fa. Questo è il link alla loro estensione js Chrome: http://dev.chromium.org/developers/design-documents/extensions/samples/gmail.zip
Sarete quindi in grado di analizzare XML che assomiglia a questo:
<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<title>Gmail - Inbox for [email protected]</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>142</fullcount>
Beh, ho intenzione di andare avanti e precisare un imaplib soluzione come suggeriva Cletus. Non vedo perché le persone sentano la necessità di usare gmail.py o Atom per questo. Questo tipo di cose è ciò per cui è stato progettato IMAP. Gmail.py è particolarmente eclatante in quanto effettivamente analizza l'HTML di Gmail. Potrebbe essere necessario per alcune cose, ma non per ottenere un conteggio dei messaggi!
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 pre-compilazione della regex può migliorare leggermente le prestazioni.
Mentre sono d'accordo, IMAP è il modo per andare qui, ci sono alcuni problemi di portabilità che potrebbero verificarsi. Poiché gli altri metodi utilizzano connessioni HTTP, potrebbero funzionare quando IMAP no (in ambienti restrittivi come Google App Engine o reti in cui il traffico non HTTP è limitato). – Tom
Tom, è vero. Ma il PO non ha detto che avevano a che fare con quei limiti, quindi non dovremmo inventarli prematuramente. –
Per una completa implementazione di leggere il valore dal feed atom:
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)
- 1. Come visualizzare il conteggio non letto sull'icona dell'app Android?
- 2. Google PubSub - Conteggio dei messaggi nell'argomento
- 3. Messaggi di decodifica dell'API Gmail in Javascript
- 4. Python, IMAP e GMail. Segna i messaggi come si vede
- 5. Come ottenere il conteggio dei messaggi non elaborati da un abbonamento a Service Bus di Windows?
- 6. Lettura di messaggi da Gmail, in PHP, utilizzando l'API Gmail
- 7. MongoDB/NOSQL: approccio migliore alla gestione dello stato letto/non letto sui messaggi
- 8. Creazione di messaggi (ovvero bozze) in Gmail con IMAP/SMTP?
- 9. MySQL "Il conteggio delle colonne non corrisponde al conteggio dei valori" ma il conteggio corrisponde allo
- 10. con C#, come recuperare la lista dei messaggi di posta elettronica da server Gmail tramite POP3
- 11. Come si ottiene il conteggio dei messaggi per l'abbonamento per argomenti di Azure?
- 12. Ottenere il conteggio dei caratteri di EditText
- 13. settimane di conteggio python
- 14. Il file AIFF-C non può essere letto con il modulo aifc in python
- 15. Autentica a JIRA con gmail in python
- 16. Il gestore dei messaggi di script non funziona
- 17. Il conteggio delle colonne non corrisponde al conteggio dei valori alla riga 1
- 18. Rilevamento dei messaggi di pane tostato
- 19. asio :: letto con timeout
- 20. Invio di comandi POP3 a Gmail restituisce i vecchi messaggi
- 21. Conteggio dei voti anonimi con precisione
- 22. Come determinare il conteggio dei metodi dell'applicazione?
- 23. PHP: definire la funzione con il conteggio dei parametri variabile?
- 24. Registrazione Python: controllare la posizione dei file di registro?
- 25. Il conteggio dei commit dal tag
- 26. "Il conteggio delle colonne non corrisponde al conteggio dei valori alla riga" ma lo è
- 27. Test dei messaggi HL7
- 28. Formattazione dei messaggi di commit
- 29. Metaprogram per il conteggio dei bit
- 30. forza ordine dei messaggi con HornetQ
Mi piace molto questa soluzione. Generalmente pulito con una sola importazione. Per ottenere il numero desiderato: len (obj.search (None, 'UnSeen') [1] [0] .split()) –
è possibile ottenere corpi di messaggi e soggetti con questa soluzione? – DataGreed
@DataGreed: con la ricerca si ottiene solo l'ID della posta, ma è possibile utilizzarlo con "obj.fetch (..." per ottenere i messaggi desiderati. Vedere questo link per esempio su come farlo: http : //yuji.wordpress.com/2011/06/22/python-imaplib-imap-example-with-gmail/ –