google-apps-script - GmailApp.search:需要在单个线程中获取所有电子邮件
问题描述
我正在使用 GmailApp.search 功能扫描我的收件箱并检索与指定标签匹配的最后 50 封邮件,并在 Google 表格上打印。
var threads = GmailApp.search("in:inbox label:HGO", 0, 50);
for (var t=0; t<threads.length; t++)
{
sheet.appendRow([threads[t].getLastMessageDate(), threads[t].getId(), threads[t].getFirstMessageSubject()])
}
问题是整个电子邮件线程仅被视为单个电子邮件。
在下面的示例中,单个邮件线程包含 25 封电子邮件:
而 Google 表格的输出只是一行数据:
有什么方法可以检索 Google Sheet 上的所有 25 封电子邮件?
解决方案
这个改装怎么样?
修改点:
- 从您的示例图像中,我认为在您的情况下,消息包含在线程中。
- 在
appendRow
循环中使用时,处理成本会很高。
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
请按如下方式修改您的脚本。
从:for (var t=0; t<threads.length; t++)
{
sheet.appendRow([threads[t].getLastMessageDate(), threads[t].getId(), threads[t].getFirstMessageSubject()])
}
至:
var values = [];
for (var t=0; t<threads.length; t++) {
var msgs = threads[t].getMessages();
for (var m = 0; m < msgs.length; m++) {
values.push([msgs[m].getDate(), msgs[m].getId(), msgs[m].getSubject()]);
}
}
sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
参考:
推荐阅读
- azure-functions - 通过 .net core api 传递一个 json 对象
- postgresql - DBeaver 导入 csv 空字符串作为 NULL 不起作用
- javascript - 从 Firebase 数据库中删除值
- ruby-on-rails - 如何在没有设计的情况下使用 ActiveAdmin 实现自己的身份验证?ActionView::Template::Error: 未定义的方法
- javascript - nan 预测值时 tensorflowjs
- shell - crontab linux中的注释行
- html - 使用 CSS 在悬停时显示元素
- android - 如何为 mpandroidchart 库自定义图表标签
- java - 断言无法解决
- reporting-services - SSRS 中的复合数据过滤器