2015-10-01 3 views
6

Dies ist das erste Skript, das ich von Grund auf neu schreiben möchte. Es war bisher nicht gut, also werde ich um Hilfe bitten.Google Apps Scripts - Extrahieren Sie Daten aus Google Mail in eine Tabelle

Fall: Ich erhalte E-Commerce-Bestätigungs-E-Mails von E-Commerce-Websites keine Antwort E-Mail-Adresse. Im E-Mail-Text senden sie E-Mail-Adressen von Käufern. Ich möchte eine automatische E-Mail an die E-Mail-Adresse des Empfängers senden.

Wie ich dies tun möchte (alle Vorschläge zur Beseitigung der Schritte werden bedankt werden).

  1. Verwenden Sie eine Regel, um eingehende E-Mails mit einem eindeutigen Tag zu versehen.

  2. Verwenden Sie dieses Tag, um E-Mails in Gmail mit einem Skript zu identifizieren, gehen Sie eins nach dem anderen und extrahieren Sie die Informationen, die ich brauche. Verwenden Sie Regex mit dem Body-Inhalt der E-Mails, um die E-Mail-Adresse zu extrahieren, die ich zum Senden der automatisierten E-Mails benötigen. Plan ist zu bekommen: Betreff, Datum, E-Mail vom Körper.

  3. Schreiben Sie alle diese Informationen in eine Tabelle.

  4. Entfernen Sie eindeutige Tag-Informationen, um doppelte Läufe zu vermeiden.

  5. Verwenden Sie dann Form Mule Addon, um E-Mails aus der Tabelle zu senden.

Bisher habe ich mit den Schritten 1 (leicht) beschäftigt haben, und wurden mit den Schritten 2 und 3 (im nicht Coder stuggling, kann ich lesen, undestrand und hacken. Von Grund auf neu zu schreiben eine völlig andere ist Ding). Ich habe mich mit 4 beschäftigt, bevor ich denke, dass dies der beste Weg ist, damit umzugehen.

Mit dem Skript extrahiere ich Informationen in die Tabelle, mit dem Addon benutze ich die Informationen aus der Tabelle, um E-Mails zu senden.

Dies ist der bisher geschriebene Code. Ich habe den Regex-Teil für später verlassen, weil ich noch nichts in die Tabelle schreiben kann. Sobald ich das funktioniere, fange ich an, in der Regex zu arbeiten und die Label-Aspekte des Skripts zu entfernen.

function myFunction() { 
    function getemails() { 
    var label = GmailApp.getUserLabelByName("Main tag/subtag"); 
    var threads = label.getThreads(); 
    for (var i = 0; i < threads.length; i++) { 
    var messages=threads[i].getMessages(); 
     for (var j = 0; j < messages.length; j++) { 
    var message=messages[j]; 
    var subject=message.getSubject(); 
    tosp(message); 
     } 
    } 
    } 

    function tosp(message){ 
    var body=message.getBody() 
    var date=message.getDate(); 
    var subject=message.getSubject(); 
    var id= "my spreasheet id"; 
    var ss = SpreadsheetApp.openById(id); 
    var sheet = ss.getActiveSheet(); 
    sheet.appendRow(subject,date,body);  

} 
} 

Jede Hilfe wäre willkommen.

Dank Sebastian

Antwort

15

Nach dem Code ich geschrieben und getestet, die sehr gut von Ihnen genannten die Schritte 2, 3 und 4 führt.

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSheet(); 

    var label = GmailApp.getUserLabelByName("MyLabel"); 
    var threads = label.getThreads(); 

    for (var i=0; i<threads.length; i++) 
    { 
    var messages = threads[i].getMessages(); 

    for (var j=0; j<messages.length; j++) 
    { 
     var msg = messages[j].getBody(); 
     var sub = messages[j].getSubject(); 
     var dat = messages[j].getDate(); 

     ss.appendRow([msg, sub, dat]) 
    } 
     threads[i].removeLabel(label); 
    } 
} 

einer der Fehler im Code war, dass die appendRow Funktion ein Array von Elementen innerhalb nimmt [ ] Klammern angegeben.

Je nachdem, wo Sie dieses Skript sind angebracht, Ihre Codezeile:

var ss = SpreadsheetApp.openById(id); 

ist nicht erforderlich, wenn das Skript im Skript-Editor des Tabellenkalkulations geschrieben wird, wo Sie diese E-Mails wollen angemeldet sein, .Wenn es jedoch mehrere Blätter in dieser Tabelle sind, können Sie meine Linie

var ss = SpreadsheetApp.getActiveSheet(); 

von

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Sheet1"); 

Ein weiterer Vorschlag ist, dass der aktuelle Code geben Sie Nachrichten im HTML-Format ersetzen. Daher, wenn Sie die Nachricht im Klartext erhalten möchten, wie Sie es sehen, benutzen Sie:

var msg = messages[i].getPlainBody(); 

Jetzt können Sie eine andere Funktion für regex schreiben und die Nachricht msg an, dass passieren. Hoffe das hilft!

+0

So eine schöne und detaillierte Erklärung! Ich konnte einfach nicht vorbeigehen, ohne Thumbs Up an 'pointNclick' zu geben! – Zongjun

+0

@pointNclick, sorry alter thread. aber konnte nicht helfen, zu antworten .... ich habe 5000+ Nachrichten (Gewinde) in einem Aufkleber in Gmail. aber der obige Code listet nur 524 Nachrichten in der Google-Tabelle auf. Thread.length im Debug-Modus zeigt nur 500. Was könnte der Grund sein? – sifar786