我使用Gmail帐户通过其用户和序列号在Google电子表格中列出的设备接收状态更新。状态更新电子邮件将在其电子邮件主题中包含设备的序列号,并且通常每个设备每周发送一次。由于设备数量(600+),我每天都会从各种设备中不断涌入状态更新。我要做的是设置一个脚本,它将搜索我的收件箱,并创建一个我没有收到状态更新电子邮件的设备列表,从中可以提示我找出该设备未报告的原因。< / p>
我修改了我在网上找到的脚本:http://forums.mozillazine.org/viewtopic.php?f=46&t=2740775。它的工作原理是获取电子表格中列出的设备序列号,并在收件箱中搜索过去15天内发送的序列号的电子邮件主题。当电子表格有大约200个项目时,脚本工作正常,但除此之外,我开始得到“超出最大执行时间”错误,我需要它现在做600多项,随着时间的推移更多。我还必须添加Utilities.sleep(1000)行以避免“服务在短时间内调用太多次:gmail rateMax”错误。是否有更好的方法来编写此脚本以避免这些错误?
function SearchEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var waittime = 15;
var emailTo = "temp@email.com";
var emailSubject = "NO EMAIL IN " + waittime + " DAYS FROM FOLLOWING DEVICES";
var emailText = "";
for (var i = 1; i < data.length; i++) {
Utilities.sleep(1000);
var j = i + 1;
var gsearch = "in:inbox subject:(" + data[i][1] + ") newer_than:" + waittime + "d";
var threads = GmailApp.search(gsearch, 0, 1);
if (threads.length == 0) {
var emailText = emailText + j + " Device: " + data[i][1] + " User: " + data[i][0] + "\n";
}
}
MailApp.sendEmail(emailTo, emailSubject, emailText);
}
答案 0 :(得分:0)
我建议你从另一个角度看问题。
您能找到报告发送的所有电子邮件的常用字符串吗?像主体或身体中的“设备状态”......
通过这种方式,您可以在收件箱中搜索该字符串,在其上添加标签,以避免重新检查它们,并使用简单的函数检查电子表格中的数字是否在列表中。
function checkList(device){
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for(var n=0;n<data.length;n++){
if(data[n][0]==device){ return true};// assuming number are in column A
}
return false;
}
然后仅发送邮件if(checkList(device)!=true){
我认为这会更有效率。