【问题标题】:Google Apps Script GmailApp - Label threads include off-label messagesGoogle Apps 脚本 GmailApp - 标签线程包括标签外消息
【发布时间】:2016-12-16 09:30:20
【问题描述】:

我正在使用以下内容来检索我的标签的线程和消息:

var threads = GmailApp.search("label:labelName to:forwarded@email.addr");    
//Same result returned from using
//var threads = GmailApp.getUserLabelByName(labelName).getThreads();

for (var i=0; i<threads.length; i++){    
  var messages = GmailApp.getMessagesForThread(threads[i]);
  for (var j=0; j<messages.length;j++){
    var msg=messages[j].getPlainBody();
    ...
  }
}

我正在成功检索数据。但是,有一些孤立的事件,其中发送到搜索中指定的地址且与标签无关的地址的消息聚集到线程中。我可以通过电子邮件帐户本身的“对话视图”来确认这一点。

我正在尝试仅检索与我的搜索条件匹配的消息,而不是属于线程成员但不属于标签成员的消息。我怎样才能可靠地做到这一点?

更新:

因此,经过广泛研究,我得出结论,目前脚本 API 无法做到这一点。但是,脚本现在可以通过将其作为资源启用,然后在您的 Google 开发人员中心启用 GMail API 来包含完整的 GMail API。使用完整的 GMail API,下面的代码可用于比较邮件标签,但使用 Scripts API 则无法做到这一点。我已提交功能请求here

与上面的代码一致,下面将用于验证消息标签:

var abort=true;
var labelID="permenant_label_id"; //NOT label name.
//Compare message label
var compare=Gmail.Users.Messages.get('me', messages[j].getID());
for (var l=0; l<compare.labelIds.length;l++) {
  //if abort==false then message verified against label.
  abort = (compare.labelIds[l]!=labelID)?true:false;
  if (!abort) break; //stop sorting labels
}   

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    因此,经过广泛研究,我得出结论,目前脚本 API 无法做到这一点。但是,脚本现在可以通过将其作为资源启用,然后在您的 Google 开发人员中心启用 GMail API 来包含完整的 GMail API。使用完整的 GMail API,下面的代码可用于比较邮件标签,但使用 Scripts API 则无法做到这一点。

    与上面的代码一致,下面将用于验证消息标签:

    var abort=true;
    var labelID="permenant_label_id"; //NOT label name.
    //Compare message label
    var compare=Gmail.Users.Messages.get('me', messages[j].getID());
    for (var l=0; l<compare.labelIds.length;l++) {
      //if abort==false then message verified against label.
      abort = (compare.labelIds[l]!=labelID)?true:false;
      if (!abort) break; //stop sorting labels
    }   
    

    【讨论】:

      【解决方案2】:

      在线程中迭代消息时,您可以使用 getTo() 函数。然后检查 getTo() 的结果是否是您要搜索的值。

      希望我正确理解了您的问题和目标。

      【讨论】:

      • 这确实为我提供了第二级验证 - 但我更愿意使用标签作为控件,因为我已经使用过滤器可靠地创建标签。此帐户可能存在其他电子邮件。
      【解决方案3】:

      您可以尝试Class GmailLabel 中的给定方法,例如removeFromThread(thread)removeFromThreads(threads),其中这些方法从给定线程中删除标签并强制线程刷新。

      更多信息也可以在 - Create time-based Gmail filters with Google Apps Script

      【讨论】:

      • 这将从标签中删除所需的消息。不需要的邮件已经没有附加到标签上,高级 Gmail API 也不包括将邮件从线程中分离出来的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多