Gmail脚本:基于时间的过滤器

时间:2016-01-08 15:08:54

标签: google-apps-script gmail

希望有人可以帮助我!

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

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

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

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

-UPDATE- 这是一个测试代码,但它似乎没有工作。我很快就在我的收件箱中收到了大量的所有邮件,希望有人可以帮忙清理它?

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

1 个答案:

答案 0 :(得分:0)

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

getMessagesForThread(thread)

您将能够获得新消息并比较他们的时间。

GmailMessage.getDate()

选择要发送垃圾邮件并将其删除的邮件。

moveMessageToTrash(message)

所有方法和说明均可在Google developer app script -Gmail service

上找到

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

var actionToTake = now < endDate && now > 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;
}