首页 > 解决方案 > 使用 Google Apps 脚本根据上次回复 GMail 中的线程的日期添加标签

问题描述

我为我的 GMail 帐户创建了一个 Google Apps 脚本。它通过我的@ACTIONS 文件夹中的电子邮件,并根据它的年龄添加标签。

例如,这部分脚本在电子邮件超过一周时添加标签1 WEEK OLD :

var threads = GmailApp.search('label:@actions older_than:7d newer_than:14d -(label:1 WEEK OLD) ');
var label = GmailApp.getUserLabelByName("1 WEEK OLD");

for (var t in threads) {
  threads[t].addLabel(label);
};

我还有其他的为 3 天、2 周和 30 天添加标签。当电子邮件被移出@ACTIONS 文件夹时,标签将被删除:

var threads = GmailApp.search('-(label:@actions) (label:1 WEEK OLD)');
var label = GmailApp.getUserLabelByName("1 WEEK OLD");

for (var t in threads) {
  threads[t].removeLabel(label);
};

问题在于 Gmail 搜索功能:older_than 适用于线程中的初始电子邮件 - 而不是最终电子邮件。因此,即使稍后有回复,也会显示标签。例如,几个月前收到的一封电子邮件添加了 30 DAYS 标签,尽管它是在上周回复的。

有没有办法根据上次回复的日期添加这些标签 - 而不是原始电子邮件的日期。

完整的脚本在这里:https ://pastebin.com/Xdv8U5eV

谢谢!

标签: google-apps-scriptgmail

解决方案


我解决了这个问题。我需要做一个 IF 语句getLastMessageDate()

var threads = GmailApp.search('label:@actions) older_than:1d newer_than:3d -(label:1 DAY OLD) ');
var label = GmailApp.getUserLabelByName("1 DAY OLD");
var minDays = 1 // Enter # of days
var maxDays = 3 // Enter # of days
var minDate = new Date();
var maxDate = new Date();
minDate.setDate(minDate.getDate()-minDays);
maxDate.setDate(maxDate.getDate()-maxDays);

for (var t in threads) {
   if (threads[t].getLastMessageDate()>maxDate && threads[t].getLastMessageDate()<minDate )
      {
          threads[t].addLabel(label);
      };
};

推荐阅读