如何避免在 Gmail 中自动转发重复的电子邮件

How to avoid auto-forwarding duplicate emails in Gmail

我公司有3个部门共用一个Gmail地址,每个部门处理不同的工作。

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

我们希望通过 Google 脚本自动转发来代替手动过程。电子邮件将根据每个部门的客户自动转发。比方说,如果发件人的电子邮件地址包含“@company_A.com”,它将被自动转发到部门 1.

我们认为我们可以通过使用 Google 脚本来实现这一点,这样脚本将获取发件人的地址,检查它是否包含某些字符串,并转发符合条件的电子邮件。我们想在收件箱中获取 50 条最新消息并查看。

但是,我们遇到了一个问题:如果每次查看50条最新消息,如何避免转发上次已经转发的消息。

感谢您的任何建议。

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

我最近发布了这样一个脚本,它完全可以满足您的要求,几乎...

我建议不要使用最后 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
    }

下面是我使用日期条件和标签自动转发消息的代码。我还想问问有没有什么方法可以缩短转发条件(我用的是indexOf方法,必须指定转发的每个条件:要么包含"companyA.com"要么包含"companyB.com"要么包含"companyC.com"

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


  }  
}

有时候,最好的节目就是没有节目。

GMail 的过滤器已经能够识别符合您描述的条件的传入邮件。参考Advanced Search。根据您的需要,from: 搜索允许匹配子字符串,包括涵盖整个公司的域:

from:(@company_A.com)

由于过滤器仅适用于收件箱,任何首先被其他过滤器重定向或自动移动到垃圾邮件 文件夹的邮件都将被过滤器遗漏。这可以通过确保您的过滤器顺序设置为避免此类冲突来避免,并且您感兴趣的域在您允许的发件人列表中。

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

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