google-apps-script - 如何在已导入电子邮件后获取脚本以获取电子邮件?(忽略已被脚本调用的电子邮件)
问题描述
问题:每次我运行脚本时,以前的电子邮件都会加载到电子表格中。鉴于我需要每周运行此脚本,我想忽略已经从先前运行中导入的电子邮件。
我相信需要在 for 循环中进行编辑,或者在追加之前添加一个 if 语句
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var label = GmailApp.getUserLabelByName("Test Script");
var threads = label.getThreads();
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++)
{
var msg = messages[j].getPlainBody();
var sub = messages[j].getSubject();
var dat = messages[j].getDate();
ss.appendRow([msg, sub, dat])
}
}
当前输出为: 电子邮件 1 电子邮件 2 电子邮件 3 电子邮件 1 电子邮件 2 电子邮件 3 电子邮件 4 电子邮件 1 电子邮件 2 电子邮件 3 电子邮件 4 电子邮件 5
但我希望它只添加新的电子邮件:Email 1 Email 2 Email 3 +Email 4 +Email 5
解决方案
一个简单的解决方案是检索消息 ID 并检查具有给定 ID 的消息是否已导入工作表中。
您可以这样做:
function myFunction(){
var messageArray=[];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var values=sheet.getDataRange().getValues();
for (var k=0; k<values.length; k++){
messageArray.push(values[k][0])
}
var label = GmailApp.getUserLabelByName("testlabel");
var threads = label.getThreads();
for (var i=0; i<threads.length; i++){
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++) {
var msg = messages[j].getPlainBody();
var sub = messages[j].getSubject();
var dat = messages[j].getDate();
var id= messages[j].getId()
if(messageArray.indexOf(id)==(-1)){
ss.appendRow([id, msg, sub, dat])
}
}
}
}
推荐阅读
- elasticsearch - 如何通过 Elasticsearch 查询获取每个组的所有最新记录?
- html - 包裹时的弹性项目,更改边距和填充
- mysql - 如果不存在,则插入一周内的某个工作日
- pytorch - 遇到错误,梯度计算所需的变量之一已被就地操作修改
- python - NameError:未定义名称“seasonal_decompose”
- drake - 使用广义力而不是执行器扭矩的直接转录轨迹优化
- ios - 定时器块调用失败
- wpf - ScrollViewer 在用户控件 wpf 上不起作用
- r - 如何将html标签添加到R中的矢量保持大写字母?
- c# - 反序列化列表的异常
在另一个 DLL 中