使用Google Apps脚本,根据对GMail中线程的最后答复的日期添加标签

时间:2018-07-23 11:45:36

标签: google-apps-script gmail

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

例如,当电子邮件已使用一周以上时,脚本的此部分添加标签 1周旧

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搜索功能:old_than适用于线程中的初始电子邮件,而不是最终电子邮件。因此,即使稍后有答复,也会显示标签。例如,几个月前收到的一封电子邮件尽管在上周内被回复,但仍添加了30天标签。

有没有一种方法可以根据上次答复的日期而不是原始电子邮件的日期添加这些标签。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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);
      };
};