如何避免在Gmail

时间:2015-06-25 16:50:14

标签: google-apps-script gmail

我公司为公司的3个部门提供了一个共享的Gmail地址,每个部门处理不同的工作。

当我们的客户向共享地址发送电子邮件时,他们将首先由行政办公室的负责人阅读,然后手动转发到3个部门的3个电子邮件地址进行处理。这个过程非常费力。此外,此人可能忘记转发电子邮件,当此人离开她的小隔间时,电子邮件将不会被转发。

我们希望通过Google Script自动转发来取代手动流程。电子邮件将根据每个部门的客户自动转发。假设,如果发件人的电子邮件地址包含“@ company_A.com”,则会自动转发给部门1。

我们认为我们可以通过使用Google脚本实现这一目标,以便脚本获取发件人的地址,检查它是否包含某些字符串,并转发符合条件的电子邮件。我们希望收到收件箱中的50条最新消息并进行检查。

但是,我们遇到了一个问题:如果每次检查50条最新消息,我们怎样才能避免转发前一次转发的消息。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:0)

最简单的方法是使用您要添加到已传输邮件的标签。

我最近发布了这样一个完全符合你要求的脚本,差不多......

而不是采用我建议在日期标准上工作的50条最后消息,它似乎更合乎逻辑,更省时。 您将在代码中看到我在gmail中使用高级搜索this tool is quite powerful (doc here),您可以根据自己的情况轻松调整它。

问题:Gmail not forwarding some messages

代码:

    function transferEmails() {
      Logger.clear();
      var trfTo = "theNewRecipentAddress@domain.com";
      var trf = GmailApp.getUserLabelByName('transférés');
      if(trf==null){
        trf = GmailApp.createLabel('transférés');
      }
      var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy/MM/dd")
// note the minus sign before label to exclude threads having this label
      var threadsToday = GmailApp.search("after:"+today+" -label:transférés in:inbox" );

      Logger.log("today day = "+new Date().getDate());
      Logger.log('Threads today : '+threadsToday.length);
      var count = 0;
      for(var n=0;n<threadsToday.length;n++){
        threadsToday[n].addLabel(trf);
        var msg = threadsToday[n].getMessages();
        if(msg==null){continue};
        for(var m=0;m<msg.length;m++){
          if(msg[m].isInTrash()||msg[m].getFrom().indexOf(Session.getActiveUser().getEmail())>-1){continue};
          Logger.log("msg from : "+msg[m].getFrom());
          count++;
          var ori = msg[m].getFrom();
          var sujet = msg[m].getSubject();
          Logger.log('this thread ('+sujet+') has '+msg.length+' messages');
          if(msg[m].getDate().getDate()==new Date().getDate()){  // if message was sent today
            Logger.log(sujet+' du '+msg[m].getDate()+'  >> transfert message Nr '+count+'\n\n');
            try{
              msg[m].forward(trfTo,{name:ori,replyTo:ori});
            }catch(err){
              GmailApp.sendEmail(Session.getActiveUser().getEmail(), "Erreur de transfert, message de "+ori+" avec le sujet "+sujet
                                           +" n'a pas été transféré","Erreur de transfert, message de "+ori+" avec le sujet "+sujet+" n'a pas été transféré") ERROR MSG : "+err;
                       }
          }else{
            Logger.log(sujet+' du '+msg[m].getDate()+'  >> pas transféré');
          }
        } 
      }
     GmailApp.sendEmail("myAddressOusideOfDomain@gmail.com","log transfert", Logger.getLog());// I use my address to keep an eye on what happens
    }

答案 1 :(得分:0)

以下是使用日期条件和标签自动转发邮件的代码。我还想询问是否有任何方法可以缩短转发条件(我使用indexOf方法并且必须指定转发的每个条件:要么包含&#34; companyA.com&#34;要么包含&#34; companyB。 com&#34;或包含&#34; companyC.com&#34;

function Auto_forward() {
var labelChecked = GmailApp.getUserLabelByName("test_checked");
  var threadsToCheck = GmailApp.search('in:inbox -label:test_checked newer_than:10h');


  for (var i=0; i<threadsToCheck.length; i++) {
    var message = threadsToCheck[i].getMessages()[0];
    var addressToCheck = message.getFrom();
    var subject = message.getSubject();

    if (addressToCheck.toLowerCase().indexOf("@companyA.com") > -1 || addressToCheck.toLowerCase().indexOf("@companyB.com") > -1)    


    {
      message.forward("email@example.com", {subject: subject})}

    threadsToCheck[i].addLabel(labelChecked);


  }  
}

答案 2 :(得分:0)

有时,最好的节目不是节目。

GMail的过滤器已经能够识别符合您所描述标准的传入邮件。请参阅Advanced Search。根据您的需求,from:搜索允许匹配子字符串,包括覆盖整个公司的域名:

from:(@company_A.com)

由于过滤器仅适用于收件箱,因此过滤器会错过任何首先由其他过滤器重定向或自动移至垃圾邮件文件夹的邮件。通过确保将过滤器顺序设置为避免此类冲突,以及您感兴趣的域位于允许的发件人列表中,可以避免这种情况。

如果您担心自己可能错过了此类消息,可以随时在UI中搜索:

(in:inbox OR in:spam) from:(@company_A.com)