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
Das könnte Dich auch interessieren
- Anzahl Nachrichten bestimmtes User Label in GMail Google Tabellen Script (Snippet)
- Anzahl User Labels in GMail Google Tabellen Script (Snippet)
- Anzahl ungelesener Emails Google Tabellen Script (Snippet)
- Ausgabe User Labels von GMail Google Tabellen Script (Snippet)
- Email Betreff von GMail abrufen Google Tabellen Script (Snippet)
- Email mit PDF Anhang versenden als Google Tabellen Script (Snippet)
- Google Tabellen Script autorisieren
- Mein erstes Script programmieren mit Google Tabellen
- Termin in den Kalender eintragen (Google Tabellen) Script
- Zeitstempel mit Benutzer als Notiz (Google Tabellen) Script
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