Email Betreff und Nachricht von GMail abrufen Google Tabellen Script
In diesem sehr kurzen Tutorial und sogenannten Snippet "Email Betreff und Nachricht von GMail abrufen Google Tabellen Script" zeige ich Euch wie Ihr ein Script erstellen könnt welches automatisch den Betreff und die Nachrichten des Google Mail Kontos ausgibt. Ihr könnt nicht nur die letzten Emails abrufen sondern auch nach einem bestimmten Label suchen oder ein Suchwort benutzen. Das Ganze wird ĂŒber 4 Spalten ausgegeben.
Im Script fĂŒr die Funktion selbst habe ich die einzelnen Zeilen kommentiert. Hiermit sollte es eigentlich einfach sein das Script vom Aufbau her zu verstehen.
Das Script könnt Ihr kopieren und mĂŒsst es in Euren Scripteditor einfĂŒgen.
Vorab ein Video welches Euch zeigt wie man ein einfaches Script programmieren kann und wie Ihr den Scripteditor aufrufen könnt:
Mein erstes Script programmieren mit GOOGLE Tabellen
Achtung:
Benutzt zum Ăben eine separate Tabelle fĂŒr Testzwecke oder eine Kopie des Originals damit Euch keine Daten verloren gehen.
Beschreibung:
Ausgegeben wird in Spalte:
A: Die Threadnummer und die Anzahl der enthaltenen Nachrichten
B: Der Betreff:
C: Von, CC, BCC, Datum, und Nachrichten ID
D: Die Nachricht
Die Funktion emailBetreffUndNachrichtAbrufen() ist eine Funktion die Ihr direkt ĂŒber den Scripteditor aufrufen könnt. Ihr könnt natĂŒrlich auch einen Button erstellen um diese Funktion ĂŒber ein Klick darauf auszufĂŒhren. Wie das mit dem Button funktioniert zeige ich in dem oben angegebenen Video.
Im oberen Bereich des Scriptes wird das aktive Tabellenblatt zugewiesen.
Ich benutze noch eine ZÀhlervariable namens counter weil ich die Ausgabe nummerieren möchte.
Mit GmailApp.getInboxThreads(0, 10); holen wir uns die ersten 10 Threads und weisen dieses Array der Variablen threads zu.
Wer sich auf einen bestimmten Label beziehen möchte kann auch folgende Zeile benutzen:
GmailApp.getUserLabelByName('DEIN LABEL').getThreads(0,10)
Hier muss der Label in Deinem Posteingang vorkommen und wenn ich richtig liege dann muss der Eintrag auch in der obersten Ebene liegen. Untergeordnete Labels haben bei mir nicht funktioniert (liegt aber vielleicht auch an mir und muss dass spÀter nochmal testen).
Hinweis: Achtet darauf dass wenn Ihr die Anzahl der Threads erhöht auch die Laufzeit des Scripts erhöht wird. Das kann eventuell dazu fĂŒhren dass dieses Script wegen ZeitĂŒberschreitung abgebrochen wird.
Doppelte For Schleife
Ich benutze hier eine doppelte for Schleife. In der ersten for Schleife arbeite ich das Array mit den Threads ab. Mit threads.length holen wir uns die Anzahl der Threads und können damit die Schleife passend beenden.
In der Ă€uĂeren Schleife hole ich mir die Anzahl der enthaltenen Nachrichten der jeweiligen Threads.
Die Nummerierung der Threads und die Anzahl der Nachrichten innerhalb von einem Thread schreibe ich ĂŒber setValue in Spalte A.
In Spalte B schreibe ich mittels threads[i].getFirstMessageSubject() den Betreff.
Die innere for Schleife ĂŒberprĂŒft wie viele Nachrichten innerhalb eines Threads enthalten sind und wird entsprechend der Anzahl durchlaufen. Die Anzahl der Nachrichten ermittle ich ĂŒber anzahlNachrichten=threads[i].getMessages().length.
In der inneren Schleife gebe ich weitere Informationen ĂŒber die Nachrichten in Spalte C aus (Von, CC, BCC, Datum, Nachrichten ID).
Spalte D verwende ich dazu um die Nachricht mit der Funktion threads[i].getMessages()[j].getPlainBody() auszugeben.
Zum Schluss wird der counter bei jedem Durchlauf der Schleife immer um eins erhöht.
Wenn Ihr andere Schleifen benutzen wollt dann schaut Euch auch mal diese Seite an:
Ăbersicht der Schleifen in Google Tabellen
FĂŒr die Eingabe des Labels oder des Suchwortes könnt Ihr natĂŒrlich auch die Daten aus einer Zelle mit getRange und getValue auslesen anstatt diese immer im Script zu Ă€ndern. In vielen Tutorials hier auf meiner Webseite ĂŒber die Scriptprogammierung zeige ich ja wie das geht.
Email Betreff und Nachricht von GMail abrufen Google Tabellen Script
function emailBetreffUndNachrichtAbrufen() { // Actives Tabellenblatt zuweisen var sa = SpreadsheetApp.getActiveSheet(); // Einfacher ZĂ€hler der bei 1 anfĂ€ngt und als Nummerierung fĂŒr die Ausgabe dient var counter=1; //++++++++++++++++++++++++++++++++++++++++++++++++++++ // Hier könnt Ihr Euch aussuchen ob Ihr einen bestimmten Label angeben wollt oder nicht //!!!!! Wenn Ihr lieber einen Label oder die Suche benutzen möchtet einfach die Kommentare // entsprechend setzen/entfernen!!!! // Einlesen von maximal 10 Email Threads aus dem Posteingang als Array // Anzahl kann geĂ€ndert werden. var threads = GmailApp.getInboxThreads(0, 10); // Einlesen von maximal 10 Email Threads als Array mit einem bestimmten Label // Anzahl kann geĂ€ndert werden. // var threads = GmailApp.getUserLabelByName('DEIN LABEL').getThreads(0,10); // Einlesen von Emails und Suche mit einem bestimmten Suchwort / Hier kann auch "Label: Dein Label" eingesetzt werden. // var threads = GmailApp.search("Dein Suchwort") //++++++++++++++++++++++++++++++++++++++++++++++++++++ // Abarbeiten des Arrays in einer Schleife for (var i = 0; i < threads.length; i++) { // Letzte beschriebene Zeile von der aktiven Tabelle zuweisen // +1 ergibt dann die erste freie Zeile. Normalerweise hĂ€tte die Variable dann ersteFreieZeile heiĂen können ;) var letzteZeile = sa.getLastRow()+1; // Anzahl der Nachrichten des jeweiligen Threads ermitteln und zuweisen var anzahlNachrichten=threads[i].getMessages().length; // Ausgabe der Thread Nr sowie die Anzahl der enthaltenen Nachrichten in Spalte A sa.getRange((letzteZeile), 1).setValue("Thread Nr.: "+ counter + "\nAnzahl der Nachrichten: " + anzahlNachrichten); // Den Betreff in Spalte B eintragen sa.getRange((letzteZeile), 2).setValue("Betreff : " + threads[i].getFirstMessageSubject()); for (var j=0; j<anzahlNachrichten;j++){ // Ausgabe von Informationen ĂŒber diese Email in Spalte C (Von, CC, BCC, Datum, Nachrichten ID) sa.getRange((letzteZeile+j), 3).setValue( "Von: " + threads[i].getMessages()[j].getFrom() +"\n"+ "CC: " + threads[i].getMessages()[j].getCc() +"\n"+ "BCC: " + threads[i].getMessages()[j].getBcc() +"\n"+ "Datum: " + threads[i].getMessages()[j].getDate() +"\n"+ "Nachrichten ID: " + threads[i].getMessages()[j].getId() +"\n"); // Ausgabe der Nachricht in Spalte D sa.getRange((letzteZeile+j), 4).setValue((j+1) + ". Nachricht :\n" + threads[i].getMessages()[j].getPlainBody()); } // Der Counter wird nach jedem Durchlauf um eins erhöht. Das gleiche wie: counter=counter+1; counter++; } }
Die Benutzung der Scripte erfolgt natĂŒrlich wie immer auf eigene Gefahr.
Euch gefÀllt das Script und Ihr wollt Euch gerne bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] đ
Dies ist Teil der Serie: "Google Tabellen Script Programmierung"
Dieses Tutorial ist Teil einer Serie die als eine Art Datenbank fĂŒr kleinere Snippets dient. Damit habt Ihr die Möglichkeit fĂŒr Eure Projekte einen Teil des Codes hier direkt zu kopieren und wie in Modulbauweise das ganze anzuwenden.
Die Liste aller Snippets findet Ihr hier:
Google Tabellen Script Programmierung
2 Comments
Hallo Chris!
Es funktioniert auf Anhieb sehr gut!
Dabei ist mir der Gedanke gekommen, ob man auch anders vorgehen kann:
Kann google tabellen/skript laufend prĂŒfen (Webhook?) ob eine mail mit einem bestimmten Text in der Ăberschrift reinkommt und diese dann importiert?
Hintergrund: Meine Fritz.box sendet mir per mail Anrufe in Abwesenheit realtime zu. Diese Info hÀtte ich gerne in meinem "Dashboard" (google tabellen).
Und so könnte ich auch ad hoc breaking news, die ĂŒber Mail reinkommen, super verarbeiten.
Vielleicht hast Du hierzu ja eine Idee.
GruĂ
Eckhard
Normalerweise sollte das funktionieren. In der Schleife wo die Nachricht oder vielleicht auch nur die Betreffzeile ausgelesen wird könntest Du ĂŒber eine IF Abfrage checken ob der Inhalt vorhanden ist. Wenn der Inhalt nicht vorhanden ist wird die Schleife weiter durchlaufen. Sollte der Inhalt vorhanden sein, kannst Du diesen auslesen und die Schleife mit break beenden.
Wenn Du Dir in der Tabelle einen kleinen Bereich reservierst könntest Du die Nachricht immer in die erste Zeile schreiben lassen. Eventuell kannst Du Dir ĂŒber eine Art Trigger diese Funktion zum Abrufen der Email immer automatisch aktualieren lassen oder erstellst einen Button fĂŒr die Funktion oder machst das in die Funktion onUpdate (fĂŒhrt die Funktion aus sobald eine Zelle geĂ€ndert wird).
Viele GrĂŒĂe
Chris