首页 > 解决方案 > GmailApp.getMessagesForThreads() 返回太多消息

问题描述

我想在我的 Gmail 帐户中返回指定日期收到的所有电子邮件主题的列表。如果有多条消息具有相同的主题,我想知道有多少条。这就是我所做的:

var emailThreads = GmailApp.search("subject:<partial_subject> after:2020/8/30 before:2020/8/31");
var messages = GmailApp.getMessagesForThreads(emailThreads);

这将返回“消息数组的数组,其中外部数组中的每个项目对应于一个线程,而内部数组包含该线程中的消息”。

我尝试像这样访问我需要的数据:

for (i = 0; i < messages.length; i++) {
  messages[i][0].getSubject() // a subject
  messages[i].length          // number of messages with the same subject
}

但是,这会返回比 Gmail UI 中显示的更多的邮件。

这是我注意到的:

考虑到这段代码非常简单,而且我只使用谷歌提供的方法,我想我一定误解了一些东西,或者 Gmail 对线程中的消息做了一些奇怪的事情。

任何想法这可能是什么以及如何解决它?


编辑:我注意到 gmail 过滤器中有一个“不包括聊天”复选框,它将“-in:chats”添加到搜索查询中,但它也没有帮助。我还尝试在查询中添加“in:inbox”,但结果没有变化。

标签: google-apps-scriptgmail

解决方案


解释:

  • 您收到太多消息的原因是您当前的过滤条件不仅查询电子邮件,还查询环聊消息或其他线程,而不是电子邮件。

  • 使用它来获取所有电子邮件的主题:

    var emailThreads = GmailApp.search("is:inbox after:2020/8/30 before:2020/8/31");
    

解决方案:

这是完整代码的样子:

function myFunction() {
  
  var emailThreads = GmailApp.search("is:inbox after:2020/8/30 before:2020/8/31");
  var messages = GmailApp.getMessagesForThreads(emailThreads);
  var messageArr = [];
   
  for (i = 0; i < messages.length; i++) {
  Logger.log(messages[i][0].getSubject()) // a subject
  Logger.log(messages[i].length)        // number of messages with the same subject
}
      
  messages.forEach(m=>{
         messageArr.push({
         subject: m[0].getSubject(),
         num_messages:m.length
  })});    
}
  • 我还为您创建了一个 json 数组messageArr,其中包含所有主题名称和每个主题的消息数量。

推荐阅读