2017-05-23 2 views
0

Ich verwende dieses Google Apps-Skript zum Extrahieren und Parsen von Datenfeldern aus dem Nachrichtentext von Google Mail-Nachrichten. Ich habe das Skript so geändert, dass es für die Felder funktioniert, die ich in meinen E-Mails habe. Ich habe jedoch festgestellt, dass es nur funktioniert, wenn E-Mails unterschiedliche Betreffzeilen haben. Wenn ich zum Beispiel fünf E-Mails mit unterschiedlichen Betreffzeilen habe, erstellt das Skript fünf Zeilen in einer Google-Tabelle, eine für jede E-Mail. Aber wenn ich 5 E-Mails alle mit der gleichen Betreffzeile habe, bekomme ich nur eine Zeile für die älteste E-Mail im Posteingang. Weiß jemand, wie ich dieses Skript modifizieren kann, damit die Betreffzeile für alle E-Mails gleich sein kann? Vielen Dank!Google Apps-Skript - Analysieren von Daten aus Google Mail-Text mit identischer Betreffzeile

/* Based on https://gist.github.com/Ferrari/9678772 */ 

function parseEmailMessages(start) { 

start = start || 0; 

var threads = GmailApp.getInboxThreads(start, 100); 
var sheet = SpreadsheetApp.getActiveSheet(); 

for (var i = 0; i < threads.length; i++) { 

// Get the first email message of a threads 
var tmp, 
    message = threads[i].getMessages()[0], 
    subject = message.getSubject(), 
    content = message.getPlainBody(); 

// Get the plain text body of the email message 
// You may also use getRawContent() for parsing HTML 

// Implement Parsing rules using regular expressions 
if (content) { 

    tmp = content.match(/Name:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var username = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/Title:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var title = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/Organization:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var organization = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/City:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var city = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/State:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var state = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/country:\s*([A-Za-z0-9.\s]+)(\r?\n)/); 
    var country = (tmp && tmp[1]) ? tmp[1].trim() : 'No username'; 

    tmp = content.match(/E-mail:\s*([\s\S]+)/); 
    var email = (tmp && tmp[1]) ? tmp[1] : 'No comment'; 

    sheet.appendRow([username, title, organization, city, state, country, email]); 

} // End if 

    } // End for loop 
} 

Antwort

0

diese Zeile: message = threads[i].getMessages()[0] ruft nur die erste (älteste) Nachricht in dem Gewinde, das heißt Index 0 des Gewinde-Array. Sie möchten jede Nachricht im Thread durchlaufen, sodass Sie den gesamten Thread in einem neuen Array abrufen müssen. Kurz gesagt, verlieren Sie den Array-Index nach dem getMessages() Aufruf.
Versuchen Sie, diese Logik:

threads = GmailApp.getInboxThreads(start, 100) 
for (i = 0; i < threads.length; i++) 
    messages = threads[i].getMessages() 
    for (j = 0; j < thread.length; j++) 
    subject = messages[j].getSubject() 
    content = messages[j].getPlainBody() 
    etc... 
+0

Ich bin immer noch nur eine Reihe von Daten zu bekommen. – dlc3172

+0

Sehr seltsam! Ich habe sowohl Ihren Code und mein Update als Test ausgeführt, um eine unterschiedliche Anzahl von Zeilen für jede Implementierung zu erhalten. Werden Ihre E-Mails mit demselben Betreff als Threads angezeigt? Was sehen Sie, wenn Sie den E-Mail-Betreff zusammen mit Ihrer anderen Ausgabe aufzeichnen? Werden nur die ersten 100 Threads abgerufen, die zu dem beitragen, was Sie sehen? –

+0

Nun, ich habe beschlossen, nur den Code in der PHP-Datei zu ändern, die die Online-Formulardaten verschickt, so dass jede Betreffzeile eindeutig ist (Ich habe die E-Mail-Adresse des Benutzers der Betreffzeile jeder E-Mail hinzugefügt.) Dies löst das Problem und ich bekomme jetzt jede E-Mail in einer eigenen Zeile. Danke für Ihre Hilfe! – dlc3172

Verwandte Themen