提前感谢您的帮助。
我最近发现了Google Script,并且一直在尝试编写一个脚本,每天扫描收件箱中最近的500封电子邮件,审核每封电子邮件主题的内容,然后将每封电子邮件的发件人与电子表格中的电子邮件地址。如果发件人与电子表格中的电子邮件地址匹配,则脚本应输入“是”。以下是我能够在下面提出的代码。我遇到的问题是代码非常慢,在它通过大约100行数据后,它会超时。
我想知道专家是否知道我哪里出错了?我确信我的代码存在很大缺陷。但是,我无法弄清楚如何改进它。
function getMail(){
var thread = GmailApp.getInboxThreads(0,500);
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = 300; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 10); //
var data = dataRange.getValues();
var target = "Sales Email"
for (var b = 0; b < data.length; ++b){
var row = data[b];
var leadEmail = row[4];
for (var i = 0; i < thread.length; ++i){
var message = thread[i].getMessages();
for(var c = 0; c < message.length; ++c){
var currentMessage = message[c];
var subject = currentMessage.getSubject();
if(subject.indexOf(target) !== -1) {
var sender = currentMessage.getFrom().replace(/^.+<([^>]+)>$/, "$1");
if(sender == leadEmail){
sheet.getRange(startRow + b, 7).setValue("yes");
SpreadsheetApp.flush();
break;
}
}
}
}
}
}
答案 0 :(得分:0)
我设法使代码更快。没有必要为每一行一遍又一遍地从所有线程中获取所有消息。只需获取一次并将发送者写入数组。
function getMail(){
var senders = [],
threads = GmailApp.getInboxThreads(0,500),
target = "Sales Email";
for (var i = 0; i < threads.length; ++i) {
var messages = threads[i].getMessages();
for(var j = 0; j < messages.length; j++) {
var currentMessage = messages[j],
subject = currentMessage.getSubject(),
sender = currentMessage.getFrom().replace(/^.+<([^>]+)>$/, "$1");
if(subject.indexOf(target) !== -1) senders[sender] = true;
}
}
var sheet = SpreadsheetApp.getActiveSheet(),
startRow = 2,
numRows = 300,
dataRange = sheet.getRange(startRow, 1, numRows, 10),
data = dataRange.getValues();
for (var b = 0; b < data.length; ++b) {
var row = data[b],
leadEmail = row[4];
if(senders[leadEmail]) {
sheet.getRange(startRow + b, 7).setValue("yes");
}
}
}