我正在尝试制作一个脚本,该脚本会在特定标签中收取电子邮件并将其放入Google表格中。我现在正在使用这个功能:
function getMessagesWithLabel() {
var destArray = new Array();
var threads = GmailApp.getUserLabelByName('Facebook').getThreads(0,10);
for(var n in threads){
var msg = threads[n].getMessages();
var destArrayRow = new Array();
destArrayRow.push('thread has '+threads[n].getMessageCount()+' messages');
for(var m in msg){
destArrayRow.push(msg[m].getSubject());
}
destArray.push(destArrayRow);
}
Logger.log(destArray);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
if(ss.getLastRow()==0){sh.getRange(1,1).setValue('getMessagesWithLabel() RESULTS')};
sh.getRange(ss.getLastRow()+1,1,destArray.length,destArray[0].length).setValues(destArray)
}
这适用于抓取Facebook'中的所有电子邮件。标签,但每次都抓取所有电子邮件,每次运行时都会创建重复的邮件。我希望每当新的一行被放入Facebook' Facebook时,我就会创建一条新的专线。标签
答案 0 :(得分:1)
您可以探索四种想法。
GmailMessage.getDate()
过滤掉您已处理的邮件。存储脚本在ScriptProperties
中运行的时间,并在下次将其重新加载为阈值。ScriptProperties
中可能会快得多。使用search()
匹配标签和时间,再次跟踪脚本在ScriptProperties
中运行的时间。
var threads = GmailApp.search('label:"Facebook" after:"2015/6/1"');
这将为线程提供在给定日期之后添加的任何消息,但线程也将在该日期之前有消息。您可能仍然需要使用其中一个早期选项来过滤掉这些选项。 (除非,正如您在评论中指出的那样,您的主题将没有回复,因此只有一条消息。)
处理完一个主题后,删除用于对其进行分类的标签。
var oldLabel = GmailApp.getUserLabelByName('Facebook');
var newLabel = GmailApp.getUserLabelByName('Facebook-processed');
var threads = oldLabel.getThreads(0,10);
for(var n in threads){
...
threads[n].removeLabel(oldLabel).addLabel(newLabel);
}