首页 > 解决方案 > 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 封电子邮件?

标签: google-apps-scriptgoogle-sheets

解决方案


这个改装怎么样?

修改点:

  • 从您的示例图像中,我认为在您的情况下,消息包含在线程中。
  • 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);

参考:


推荐阅读