Seit längerer Zeit hab ich schon die Idee gehabt, mithilfe des Raspberry Pi und einer LED, neue E-Mails (aus Googlemail) anzeigen zu lassen. Zwischendurch habe ich dies auch schon bei anderen Projekten gesehen, jedoch noch nie wirklich mich damit auseinandergesetzt. Vorgestern sollte es dann so weit sein und ich suchte zunächst nach einer Gmail API, die mir die Anzahl neuer E-Mails ausließt.
Die Gmail API
Fündig wurde ich bei Google Developers mit der gmail_inbox_feed API. Zur Verwendung wird diese URL vorgegeben:
https://mail.google.com/mail/feed/atom
Bist du bei Gmail angemeldet und rufst im Browser die URL auf, sollte sich ein solches XML-Schema zeigen:
Das erste Bild zeigt das Schema, wenn keine neue E-Mail in deinem Posteingang liegt, das Zweite, wenn mindestens eine neue E-Mail zum Abruf bereit liegt. Bei mehreren neuen E-Mails wiederholt sich der entry-Tag / das entry-Verzeichnis je neuer E-Mail.
Zugriff auf die API
Für mein Ziel, die Anzahl neuer E-Mails auszulesen, genügt der fullcount-Tag dieser Gmail API, da dort die Anzahl bereits ausgegeben wird. Um diese Zahl nun via Shell auslesen zu können, habe ich diesen cURL-Befehl benutzt.
curl -u maxmustermann:passwort -s "https://mail.google.com/mail/feed/atom" | sed -n "s/.*<fullcount>(.*)</fullcount>.*/1/p"
Wird dieser Befehl in der Unix-Shell (z. B. auf deinem Raspberry Pi) ausgeführt, erhält man z.B. „3“ (3 neue E-Mails, maxmustermann und passwort müssen natürlich ersetzt werden)
Zur Erklärung des Befehls:
- -u maxmustermann:passwort
Der Parameter -u muss zusammen mit der E-Mail/Benutzername (es reicht der Teil vor dem @) und dem Passwort gesetzt werden. Das ist nötig, um sich bei der Gmail API zu authentifizieren. - -s
Verhindert die Ausgabe von zusätzlichen Informationen. - „https://mail.google.com/mail/feed/atom“
URL der API. - |
Der Pipe Operator/die Umleitung ist dazu da, die Ausgabe des vorherigen Befehls (links des |) als Eingabe für den nächsten Befehl (rechts des |) zu übergeben. - sed
Mit dem Befehl sed kann ein String nach einem bestimmten Muster durchsucht und durch einen neuen ersetzt werden. Kurz: Suchen und Ersetzen. - -n
Verhindert das automatische Ausgeben des Ergebnisses. - „s/.*<fullcount>(.*)</fullcount>.*/1/p“
Suchmuster. Es wird nach dem Inhalt, der zwischen <fullcount> und </fullcount> steht, gesucht und mittels 1/p ausgegeben.
Auswertung des Ergebnisses
Da wir nun die Anzahl neuer E-Mails mittels des Befehls auslesen können, muss das Ergebniss nur noch regelmäßig ausgewertet werden und bei mindestens einer neuen E-Mail die LED einschalten.
Mit einem kleinen Shell-Script lässt sich das leicht realisieren.
#!bin/sh #Variable definieren mail_count=0 while true do #Einlesen der Anzahl neuer E-Mails in die Variable mail_count mail_count=$(curl -u maxmustermann:passwort -s "https://mail.google.com/mail/feed/atom" | sed -n "s/.*<fullcount>(.*)</fullcount>.*/1/p") #Ueberpruefe ob Variable nicht leer ist if [ -n $mail_count ] then #Ueberpruefe ob mail_count groeßer als 0 if [ $mail_count -gt 0 ] then #Mindestens eine neue E-Mail #LED Einschalten else #Keine neuen E-Mails #LED Ausschalten fi fi #Intervall zum erneuten Pruefen neuer E-Mails (in Sekunden) sleep 5 done
Der Code muss nun nur noch in einer .sh-Datei gespeichert und gestartet werden (wie vorhin, „maxmustermann“ durch die E-Mail und „passwort“ durch das Passwort von Googlemail ersetzt).
Du kannst natürlich auch auf andere Werte der Gmail API zugreifen, diese Auslesen und in beliebiger Weiße ausgeben. Z. B. die ganzen E-Mails auslesen und in der Shell / Konsole anzeigen lassen.
GIbt es so etwas auch für GMX statt Gmail?