【问题标题】:Gmail Script: Time of Day based filterGmail 脚本:基于时间的过滤器
【发布时间】:2016-01-13 14:18:57
【问题描述】:

希望有人可以帮助我!

我有一个带有访问传感器的侦察警报系统。每次打开特定的门时,我都会收到有关该活动的电子邮件。由于没有来自 Scout 的一天中的时间通知,它要么是打开的,要么是关闭的,我想在电子邮件端使用 Google Apps Script for Gmail 来处理这个问题。

周一至周五 - 早上 8 点之前和下午 6 点之后来自警报系统的任何电子邮件都应该进入我的收件箱,否则应该进入垃圾箱。

周六至周日 - 来自警报系统的所有电子邮件都应发送到我的收件箱。

请告诉我这是可能的!!!

-更新- 这是一个测试代码,但它似乎不起作用。我的收件箱中在奇怪的时间收到了大量的所有邮件,希望有人能帮忙清理一下吗?

            function MoveMsgBasedOnTime() 
{
   //Enter the Label you created in your Google Apps Account for scout@#######.com
          var Label = GmailApp.getUserLabelByName("2 - Scout");

           //Retrieve All Messages with Matching Label 
         var Threads = Label.getThreads();
        for (var i = 0; i < Threads.length; i++) 
   {
    var Msgs = Threads[i].getMessages();

     for (var j=0;j < Msgs.length ;j++)
     {
     var MsgTime = new Date();
      MsgTime = Msgs[j].getDate();
       MsgTime.getDay();



       //Test For Day of Week

       //If Sunday (0) or Saturday (5)
       if (MsgTime.getDay() == 0 || MsgTime.getDay() == 6)
       {
         var test ="Weekend";
         //Move To Inbox
         Threads[i].moveToInbox();

       }

        //If Monday(1), Tuesday (2), Wednesday (3), Thursday (4), Friday (5)
        if (MsgTime.getDay() == 1 || MsgTime.getDay() == 2 || MsgTime.getDay() == 3 || MsgTime.getDay() == 4 || MsgTime.getDay() == 5 )
       {
         var test ="Weekday";


         // Time Interval To Delete Message
         var startTime = '8:00 AM';
         var endTime   = '7:30 PM';

         var now       = new Date();
         var startDate = dateObj(startTime);
         var endDate   = dateObj(endTime);
         var Label = GmailApp.getUserLabelByName("2 - Scout");

         var actionToTake = now < endDate && now > startDate ? 'delete' : 'move';

            //If Message Time is Between 8am and 6pm Take Action to Move to Trash
         if (actionToTake == "delete")
           ;

         //If Message Time is Before 8am or After 6pm Take Action to Move to Inbox
         if (actionToTake == "move")
           Threads[i].removeLabel(Label);
             Threads[i].moveToInbox();
       }
     }
    }
   }

                //Function To Parse Time from Date for Comparisson using startTime & endTime variables above
                function dateObj(d) 
             {
                       var parts = d.split(/:|\s/),
                      date  = new Date();
                   if (parts.pop().toLowerCase() == 'pm') parts[0] = (+parts[0]) + 12;
                  date.setHours(+parts.shift());
                  date.setMinutes(+parts.shift());
                 return date;
                   }

【问题讨论】:

  • 欢迎加入这不是一个我们为您工作的网站,向我们展示您的尝试,我们可以帮助您解决您的问题
  • 我希望有人能告诉我如何处理这个问题,或者将我指引到可以要求这种性质的东西的地方?

标签: google-apps-script gmail


【解决方案1】:

您可以使用 Gmail 服务类检查您的线程并获取从警报系统收到的消息。

getMessagesForThread(thread)

您将能够收到新消息并比较它们的时间。

GmailMessage.getDate()

选择要发送垃圾邮件的邮件并将其丢弃。

moveMessageToTrash(message)

所有方法和描述都可以在Google developer app script -Gmail service上找到

编辑:您将当前日期与开始和结束时间进行比较。

var actionToTake = now &lt; endDate &amp;&amp; now &gt; startDate ? 'delete' : 'move';

应该是消息时间。还对dateObj 函数做了一些修改。参考以下代码。

function MoveMsgBasedOnTime() 
{
  var Label = GmailApp.getUserLabelByName("2 - Scout");

  //Retrieve All Messages with Matching Label 
  var Threads = Label.getThreads();
  for (var i = 0; i < Threads.length; i++) 
  {
    var Msgs = Threads[i].getMessages();
    for (var j=0;j < Msgs.length ;j++)
    {
      var MsgTime = Msgs[j].getDate();
      //If Sunday (0) or Saturday (5)
      if (MsgTime.getDay() == 0 || MsgTime.getDay() == 6)
      {
        //Move To Inbox
        Threads[i].moveToInbox(); 
      }

      //If Monday(1), Tuesday (2), Wednesday (3), Thursday (4), Friday (5)
      if (MsgTime.getDay() == 1 || MsgTime.getDay() == 2 || MsgTime.getDay() == 3 || MsgTime.getDay() == 4 || MsgTime.getDay() == 5 )
      {
        var startTime = '8:00 AM';
        var endTime   = '7:30 PM';
        var startDate = dateObj(startTime,MsgTime);
        var endDate   = dateObj(endTime,MsgTime);

        var actionToTake = MsgTime < endDate && MsgTime > startDate ? 'delete' : 'move';

        //If Message Time is Between 8am and 6pm Take Action to Move to Trash
        if (actionToTake == "delete");
        {
        }

        //If Message Time is Before 8am or After 6pm Take Action to Move to Inbox
        if (actionToTake == "move")
        {
          Threads[i].removeLabel(Label);
          Threads[i].moveToInbox();
        }
      }
    }
  }
}

//Function To Parse Time from Date for Comparisson using startTime & endTime variables above
function dateObj(d,MsgTime) 
{
  var parts = d.split(/:|\s/),
      date  = new Date(MsgTime);
  if (parts.pop().toLowerCase() == 'pm') parts[0] = (+parts[0]) + 12;
  date.setHours(+parts.shift());
  date.setMinutes(+parts.shift());
  return date;
}

【讨论】:

  • Beta 代码已在 OP 中更新。也许有人可以帮我解决我的问题?
  • - 非常感谢您,不幸的是这无法正常运行。这最终会在 endTime 过去后将所有线程(尽管线程/消息的时间)放入收件箱。我希望在晚上 7:30 之后或早上 8:00 之前进入的所有线程都进入收件箱,所有其他线程都留在 Scout 标签中,这样任何进入收件箱的警报实际上都值得被通知。 @iJay
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 2018-06-23
  • 1970-01-01
  • 2021-04-13
  • 2020-08-21
  • 2019-11-17
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多