Ich verwende das folgende Skript, um E-Mail-Adressen aus Google Mail basierend auf einigen Suchkriterien zu extrahieren und sie in eine Google-Tabelle auszugeben. Funktional funktioniert das Skript und macht, was ich will.Google E-Mail-Extraktionsskript - Maximale Ausführungszeit überschritten (Egal was)
Ich bekomme jedoch ständig "Maximale Ausführungszeit überschritten", wenn ich das Skript ausführen, da die maximale Ausführungszeit für Gmail-Skripts fünf Minuten zu sein scheint. Ich habe dies mit einem kleineren Label in Gmail mit einer Handvoll E-Mails getestet und das Skript läuft erfolgreich und gibt E-Mails wie erwartet aus. Wenn ich jedoch versuche, etwas in größeren Stapeln mit mehr E-Mails zu extrahieren, kann das Skript nicht abgeschlossen werden.
Dieses Skript ist von anderen Sachen, die ich im Internet gefunden habe, cobled. Ich habe versucht, dieses Zeitlimitproblem durch Hinzufügen von for-Schleifen in einem try-Block zu beheben, wobei die Ausnahme abgefangen und in den Ruhezustand versetzt wurde, sodass das Skript die Ausführung pausieren und das Zeitlimit nicht überschreiten konnte, dies jedoch nicht funktionierte. Ich habe auch andere Methoden ausprobiert, um das Skript in den Ruhezustand zu versetzen, um eine Auszeit zu vermeiden, aber diese waren nicht möglich.
Könnte mir jemand helfen, die Zeitüberschreitung zu verhindern oder eine effizientere Art der Suche in E-Mail-Threads verwenden, um die E-Mails herauszuholen?
Edit: Ich habe den Code mit den Vorschlägen hinzugefügt, aber es kann immer noch nicht abgeschlossen werden, ohne die Ausführungszeit zu erreichen. Irgendwelche Ideen, warum das Skript nicht pausiert? Ich habe auch versucht, nur eine Nachricht mit GmailApp.search (Suche, 0, 1) zu suchen, aber das Skript wird nicht abgeschlossen, wenn ich meinen Posteingang durchsuche.
function extractEmailAddresses() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var userInputSheet = ss.getSheets()[0];
var labelName = userInputSheet.getRange("B2").getValue();
var keyword = userInputSheet.getRange("C2").getValue();
var sheetName = "Label: " + labelName;
var sheet = ss.getSheetByName (sheetName) || ss.insertSheet (sheetName, ss.getSheets().length);
sheet.clear();
var messageData = [];
var search = "label:" + label + "is:unread " + keyword;
// Process 50 Gmail threads in a batch to prevent script execution errors
var threads = GmailApp.search(search, 1, 1);
var messages, from, email, subject, mailDate;
try {
for (var x=0; x<threads.length; x++) {
var message = threads[x].getMessages()[0]; //Get message for thread
from = message.getFrom();
mailDate = message.getDate();
from = from.match(/\[email protected]\S+\.\S+/g);
if (from.length) {
email = from[0];
email = email.replace(">", "");
email = email.replace("<", "");
//push emails to array
messageData.push ([email, mailDate]);
}
}
}
catch (e) {
//Pause script to prevent exceeded timeout error
Logger.log(e.toString());
Utilities.sleep(5000);
}
//Adding our emails to the spreadsheet
sheet.getRange (1, 1, messageData.length, 2).setValues (messageData);
}
Danke für die Vorschläge. Ich habe das Skript entsprechend angepasst, aber das Skript kann immer noch nicht in einem normalen Zeitrahmen abgeschlossen werden. – Touchstone57
Ich schlage vor, dass Sie mit einem Debugger Schritt für Schritt durchgehen oder Zeitpläne erstellen, um herauszufinden, wo die Zeit genommen wird. z.B. Wie lange dauert der Aufruf 'var threads = GmailApp.search (search, 0, 50);' take? Ist das die Mehrheit? Oder wird es tatsächlich hauptsächlich dazu verwendet, die Ergebnisse zu durchlaufen? Wenn Sie in Ihrem Skript ermitteln, wo die Zeit liegt, können Sie ermitteln, auf was Sie sich für Verbesserungen konzentrieren sollten. – Bardy
Es scheint zu sein "var threads = GmailApp.search (search, 0, 50);" das könnte die meiste Zeit dauern, da ich es in 'var threads = GmailApp.search (search, 0, 5);' geändert habe. ' Durchsehen von weniger Threads, aber es ist immer noch nicht in der Lage, während der Suche im Posteingang zu vervollständigen. Liegt das daran, dass der Posteingang zu groß ist? Es funktioniert, wenn ich versuche, ein Label mit weniger E-Mails zu durchsuchen, aber ich brauche es auch, um mit einem größeren Datensatz zu arbeiten.Ich werde das Debugging versuchen, wie Sie vorgeschlagen haben, danke. – Touchstone57