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

根据电子邮件主题中提取的子字符串自动创建 Gmail 子标签Google Script

如何解决根据电子邮件主题中提取的子字符串自动创建 Gmail 子标签Google Script

我是谷歌脚本的新手。

我一直在尝试根据在电子邮件主题提取的特定 ID 或数字,自动为我从供应商处收到的电子邮件添加标签

例如,电子邮件主题是“供应商 A(供应商 ID:12349)”。因此,在父标签“供应商”下,我试图将 12349 作为引用该特定 ID 的线程或消息的子标签。一旦 Gmail 收到主题中的新 ID,就应该自动创建子标签,并会自动使用已创建的子标签 ID 标记新传入的电子邮件

我通过参考其他论坛主题尝试了很多方法,但没有一个有效。我认为我能得到的最接近的方法是让脚本引用工作表中的某个列,我用它来提取 ID 号并根据该特定行创建标签。但是,我不断收到错误消息,因为 GmailApp.createLabel("") 需要 ("") 中的名称/字符串。

以下是目前的脚本:

//retrieve gmail messages
function GatherEmails() {
    let messages = getGmail();

    let curSheet = SpreadsheetApp.getActive().getSheetByName('supplierEmails');

    messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}

function getGmail() {
    const query = "NOT label:Bounced/Out of Office";

    let threads = GmailApp.search(query);

    let label = GmailApp.getUserLabelByName("supplier");
    
    let messages = [];

    threads.forEach(thread => {
        messages.push(thread.getMessages()[0].getPlainBody());
       
    });

    return messages;
}

//call cell value by column (Sheet: "supplier Labels")
function callLabelcolum() 
{
  var ss1=SpreadsheetApp.getActive();
  var sh=ss1.getSheetByName("supplier Labels");
  var rg=sh.getDatarange();
  var vA=rg.getValues();
  var hA=vA[0];
  for(var i=1;i<vA.length;i++)
  {
    var row="";
    for(var j=0;j<vA[0].length;j++)
    {
      row[hA[j]]=vA[i][j];
    }
    Logger.log('Label: %s',row.Label);
    
  }

}

//parse & label the email massage
function parseEmail(messages,row) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("supplierEmails");

    var threads = GmailApp.search('');
  
          
  for (var i = 0; i < threads.length; i++){
    var msg = threads[i].getMessages();
    for (var j = 0; j < msg.length; j++){
      
      // Get same thread by its ID.
      var threadID = GmailApp.getThreadById(msg[j].getId());

      // Logs the permalink for the first thread in the inBox
      var thrd = GmailApp.getInBoxThreads(0,1)[0];
      var link = thrd.getPermalink();
      
      var date = msg[j].getDate();
      var from = msg[j].getFrom();
      var subj = msg[j].getSubject();
      var pmsg = msg[j].getPlainBody();
      var msgid = msg[j].getId();
      var msglink = "https://mail.google.com/mail/u/0/#inBox/"+msg[j].getId();
          
            
      // Creates the label and logs label: callLabel()
      Logger.log("label: " + GmailApp.createLabel(row));

      sheet.appendRow([from,msgid,subj,msglink]);

    }
  }
} 

这是我用来创建标签方法,但有错误

Logger.log("label: " + GmailApp.createLabel(row));

错误Exception: Invalid argument: name + 运行后没有在 gmail 中创建标签

Exception: Invalid argument: name (Message Details)

enter image description here

所以无论如何我能做到这一点吗?或者有没有我可能错过的其他方法

如果有人能帮助我,我将不胜感激。

解决方法

这是我发现方法问题后所做的。

澄清一下,创建的标签只是基于单元格值的空标签,因此没有分配线程或过滤器。但是,它确实解决了我遇到的错误。

function callLabelcolumn() 
{
  var ss = SpreadsheetApp.getActive();
  
  var sh = ss.getSheetByName('Supplier Labels');
  var rg=sh.getRange('A2:A');
  var vA=rg.getValues();

  
  vA.forEach(function(row) {
  if(row != "" && row != "#N/A"){
   
   Logger.log('Label: %s',row);
    var label = GmailApp.createLabel(row);
    
   Logger.log("label: " + label);
             
   }  

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