微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果电子邮件在 Gmail 的主题或正文中包含特定字词,则用于标记电子邮件的脚本

如何解决如果电子邮件在 Gmail 的主题或正文中包含特定字词,则用于标记电子邮件的脚本

更新: 非常感谢endothermic_dragon!你太聪明了!现在一切正常。

我之前创建过脚本,但从未为 Gmail 创建过脚本。我很难创建一个脚本来过滤传入的电子邮件,如果它们有特定的词,则对其进行标记和存档。我们每天收到大约 100 封来自与一组公司相关的不同发件人的电子邮件。每个公司都有自己的标签。通常,公司名称在电子邮件主题或正文中。我正在尝试构建一个脚本来获取每封电子邮件,检查带有主题的数组或带有纯文本的数组是否包含 getUserLabels( ),如果是,则为其分配相应的标签。我已经尝试了所有方法,从 filter() 到 forEach() 到 indexOf() 但似乎没有任何效果。我觉得 getUserLabels() 和 getInoBoxThreads() 中的数组是二维的,我很难使用它们。我已经多次重写代码,但它让我无处可去。我真的希望你们中的一个人能对此有所了解。

示例: 假设我们与 Apple、Amazon 和 Netflix 合作。这些公司中的每一个都有自己的标签。 如果收到的电子邮件主题或正文中包含“Apple”,则为其添加标签“Apple”并将其存档。如果主题或正文中包含“Amazon”和“Netflix”,则添加标签 Amazon 和 Netflix。

最终代码

function labelEmails() {
  var labels=[]
  GmailApp.getUserLabels().forEach(function(label){labels.push(label.getName())})
  var threads = GmailApp.search('is:unread').forEach(function(email){
    email.getMessages().forEach(function(thread){
      //Filter - https://developers.google.com/apps-script/reference/gmail/gmail-message
      //Example used - if body contains 'hi',mark as read.
      labels.forEach(function(label){
        if (thread.getBody().toLowerCase().includes(label.toLowerCase())){
          labelToAssign = GmailApp.getUserLabelByName(label);
          labelToAssign.addToThread(email)
        } else if (thread.getSubject().toLowerCase().includes(label.toLowerCase())) { 
           labelToAssign = GmailApp.getUserLabelByName(label);
          labelToAssign.addToThread(email)
          } 
      })
    })
    });
}

我们的一些标签是公司名称的缩写,所以我还需要一个函数来处理这些。您也可以在下面查看: (代码中的公司是随机的公司,不是真实的)

function labelExceptions() {
  var exceptions = [{exc:'apple',labeln: 'APPL'},{exc: 'amazon',labeln: 'AMZ'},{exc: 'Bank of America',labeln: 'BOFA'}]
  var threads = GmailApp.search('is:unread').forEach(function (thread){
    thread.getMessages().forEach(function(message){
      exceptions.forEach(function(exception){
        if (message.getBody().toLowerCase().includes(exception.exc)){
          labeltoAssign = GmailApp.getUserLabelByName(exception.labeln);
          labeltoAssign.addToThread(thread)
        } else if (message.getSubject().toLowerCase().includes(exception.exc)){
          labeltoAssign = GmailApp.getUserLabelByName(exception.labeln);
          labeltoAssign.addToThread(thread)
        }
      
      })
    
    })}
 );
  } 

非常感谢!

解决方法

用我的 gmail 检查,有效!

function myFunction() {
  var labels=[]
  GmailApp.getUserLabels().forEach(function(label){labels.push(label.getName())})
  var threads = GmailApp.search('is:unread').forEach(function(email){
    email.getMessages().forEach(function(thread){
      //Filter - https://developers.google.com/apps-script/reference/gmail/gmail-message
      //Example used - if body contains 'hi',mark as read.
      labels.forEach(function(label){
        if (thread.getBody().toLowerCase().includes(label.toLowerCase())){
          email.markRead()
        }
      })
    })
    });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。