【问题标题】:How to avoid auto-forwarding duplicate emails in Gmail如何避免在 Gmail 中自动转发重复的电子邮件
【发布时间】:2015-09-12 09:46:31
【问题描述】:

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

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

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

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

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

感谢您的任何建议。

【问题讨论】:

  • 您可以通过使用 gmail 中的规则来完成此操作,而无需任何代码。
  • @Mogsdad 在 gmail 中使用规则仅允许我们转发来自特定电子邮件地址的邮件,例如我的名字@companyA.com。如果一家客户公司有 100 个单独的电子邮件地址,我们必须在规则中输入 100 封电子邮件。使用谷歌脚本,我们可以检查消息的发件人是否包含“@companyA.com”并相应地转发。
  • 不是这样 - 您可以过滤“来自:@companyA.com”。 GMail 进行子字符串搜索。
  • @Mogsdad 我只是检查我的 Gmail 并搜索“来自:@companyA.com”的作品。所以我可以在 Gmail 中使用过滤器,而无需使用 Google 脚本。感谢您的帮助!
  • @Mogsdad 我发现在 Gmail 中使用 google 脚本比使用规则更有优势。当邮件被意外放入垃圾邮件时,即使您将其移回收件箱,它也不会自动转发。使用脚本,当我将它移回收件箱时,我可以自动转发它

标签: google-apps-script gmail


【解决方案1】:

最简单的方法是使用要添加到传输消息的标签。

我最近发布了一个完全符合您要求的脚本,几乎...

与其将我建议的最后 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
    }

【讨论】:

  • 使用日期条件并为收件箱邮件使用“已检查”标签是个好主意。非常感谢。
【解决方案2】:

下面是我使用日期条件和标签自动转发消息的代码。我还想问是否有任何方法可以缩短转发条件(我使用 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);


  }  
}

【讨论】:

    【解决方案3】:

    有时候,最好的程序就是没有程序。

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

    from:(@company_A.com)
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多