我正在尝试构建一个表,其中包含从我的Gmail帐户在特定时间范围内发送/接收的所有电子邮件的以下数据:(1)消息ID,(2)发件人电子邮件地址,(3)收件人电子邮件地址, (4)日期和时间,(5)主题
以下脚本似乎有效,但它超出了Google Apps脚本允许的最长执行时间。你能帮助我修改它以便它可以分批进行吗?
function dateToString(date) {
return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
}
function searchByTimeFrame(from, to) {
var threads = GmailApp.search("after:"+dateToString(from) +" before:"+dateToString(to)+" in:anywhere");
var results = [];
for (var i = 0; i < threads.length; i++) {
Logger.log(threads[i].getFirstMessageSubject() + " (count: " + threads[i].getMessageCount() + ")");
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var sender = message.getFrom();
var recipientsStr = message.getTo()
results.push([message.getId(), sender, recipientsStr, message.getDate(), message.getSubject()]);
continue;
}
}
return results;
}
function main() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var from = ss.getRange("B4").getValue();
var to = ss.getRange("B5").getValue();
var results = searchByTimeFrame(from, to);
if(results.length > 0) {
var sheet = ss.insertSheet();
var header = sheet.getRange("A1:E1").setValues([['Id', 'From', 'To', 'Date', 'Subject']]).setFontWeight("bold");;
var cell = sheet.getRange("A2:E"+(results.length+1));
cell.setValues(results);
} else {
var ui = SpreadsheetApp.getUi(); // Same variations.
ui.alert('No email found...');
}
}
答案 0 :(得分:0)
使用像CBL(MdcB85Ns0dBpktAKfKuamwZpmfj86RiLA)这样的批处理库。
我没有测试过,但你可以看到一般的想法 - 你需要更新main()来附加行而不是每次都覆盖。
var FUNCTION_NAME = "main";
var EMAIL_RECIPIENT = "!!! PUT YOUR EMAIL ADDRESS HERE !!!";
function dateToString(date) {
return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
}
function searchByTimeFrame(from, to) {
CBL.startOrResumeContinousExecutionInstance(FUNCTION_NAME)
var threads = GmailApp.search("after:" + dateToString(from) + " before:" + dateToString(to) + " in:anywhere");
var results = [];
var i = CBL.getBatchKey(FUNCTION_NAME) || 0;
for (; i < threads.length; i++) {
Logger.log(threads[i].getFirstMessageSubject() + " (count: " + threads[i].getMessageCount() + ")");
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var sender = message.getFrom();
var recipientsStr = message.getTo()
results.push([message.getId(), sender, recipientsStr, message.getDate(), message.getSubject()]);
continue; // AJR: What's this for?
if (CBL.isTimeRunningOut(FUNCTION_NAME)) {
CBL.setBatchKey(FUNCTION_NAME, i)
break;
}
}
}
if (i === threads.length) {
CBL.endContinuousExecutionInstance(FUNCTION_NAME, EMAIL_RECIPIENT, "GMail search finished")
}
return results;
}
function main() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var from = ss.getRange("B4").getValue();
var to = ss.getRange("B5").getValue();
var results = searchByTimeFrame(from, to);
if(results.length > 0) {
var sheet = ss.insertSheet();
var header = sheet.getRange("A1:E1").setValues([['Id', 'From', 'To', 'Date', 'Subject']]).setFontWeight("bold");;
var cell = sheet.getRange("A2:E"+(results.length+1));
cell.setValues(results);
} else {
var ui = SpreadsheetApp.getUi(); // Same variations.
ui.alert('No email found...');
}
}