我正在使用以下腳本根據某些搜索條件從gmail中提取電子郵件地址,並將它們輸出到Google電子表格中。在功能上,腳本的工作原理和做我想做的事情。Google電子郵件提取腳本 - 超出了最大執行時間(不管是什麼)
但是,由於gmail腳本的最長執行時間似乎爲五分鐘,所以我在運行腳本時不斷得到「超出最大執行時間」。我使用少量電子郵件在gmail中使用較小的標籤對其進行了測試,腳本運行成功並按預期輸出電子郵件。但是,當我嘗試使用更多電子郵件提取大批量的任何內容時,腳本無法完成。
此腳本與我在網絡上找到的其他內容相似。我試圖通過在try塊中添加for循環來修改這個超時問題,並且異常被捕獲併發送到睡眠狀態,以便腳本可以暫停執行並且不超過時間限制,但是這不起作用。我還嘗試了其他方法發送腳本進入睡眠狀態,以防止發生超時,但這些方法不成功。
有人可以幫助我防止發生超時,或者使用一些更有效的方式來搜索電子郵件線程來抓取電子郵件嗎?
編輯:我已經修改了添加了建議的代碼,但是如果沒有達到執行時間限制,它仍然無法完成。任何想法爲什麼劇本不暫停?我也嘗試使用GmailApp.search搜索一條消息(搜索,0,1),但是當我搜索我的收件箱時腳本不會完成。
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);
}
感謝您的建議。我已經相應地修改了腳本,但腳本仍然無法在正常時間框架內完成。 – Touchstone57
我建議你用一個調試器或者做一些時間來計算出正在進行的時間。例如調用'var threads = GmailApp.search(搜索,0,50)多久?'採取?這是多數?或者它實際上主要是在循環結果?通過對腳本進行分析以確定所花時間的位置,可以確定哪些地方可以進行改進。 – Bardy
它似乎是'var threads = GmailApp.search(搜索,0,50);'可能會花費最多的時間,因爲我將其更改爲'var threads = GmailApp.search(search,0,5);'查看較少的線程,但它仍然無法及時完成,因爲它搜索收件箱。這是因爲收件箱太大?當我嘗試使用較少的電子郵件搜索標籤時,它可以工作,但我需要它也可以使用更大的數據集。我會按照你的建議嘗試調試,謝謝。 – Touchstone57