我正在将电子邮件从特定标签导入电子表格,但在每次运行脚本时加载所有电子邮件效率不高。
我搜索过并搜索过但找不到只收到新邮件的解决方案。
我希望能采取的方法是: 使用电子邮件检查电子表格的lastrow->检查消息量。 用新消息追加行(“消息” - 最后一行)。
我希望有人能够解决这个问题,这将对我想要创建的内容产生巨大的影响!提前谢谢!
我是一个noob编码器但是创建了以下脚本来获取消息量:
function messageCount(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var label = ss.getRange('A1').getValue().toString();
var array = new Array();
var threads = GmailApp.search("in:" + label);
for(var n in threads){
var msg = threads[n].getMessages();
var threadCount = threads[n].getMessageCount();
array.push(threadCount);
}
var count = 0;
for(var i = 0; i < array.length; i++){
count = count + array[i];
}
var currentTransactions = count;
Logger.log(currentTransactions);
}
答案 0 :(得分:0)
您可以拥有一个跟踪已处理邮件的标签(比如计数)。将标签应用于已计数的线程,并在下次运行时忽略这些。
function messageCount(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var label = ss.getRange('A1').getValue().toString();
var processed = GmailApp.getUserLabelByName("Counted") || GmailApp.createLabel("Counted");
var threads = GmailApp.search("-in:Counted in:" + label);
var count = 0;
for(var t in threads){
count += threads[t].getMessageCount();
threads[t].addLabel(processed);
}
Logger.log(count);
}
答案 1 :(得分:0)
我使用了不同的解决方案。 我不确定电子邮件ID是否具有逻辑顺序,因此我认为唯一合乎逻辑的做法是按JS时间(毫秒)对电子邮件进行排序。
我所做的是: - 获取所有电子邮件并将其转换为对象。属性键是JS时间。 - 将所有对象放在工作表中 - 在下一次运行中,检查工作表中的长度与新电子邮件批次之间是否存在差异 - 如果是这样的话:oldbatch-newbatch(长度)。 - 使用JS时间对新数组进行排序 - 将JS时间与属性键匹配,并执行一个从新收到的消息中返回mailid的对象方法
它可能效率不高,但它完成了工作。你可以在这里查看代码(abnMailMoneyFetcher()):GAS