Google apps script 根据电子邮件主题中提取的子字符串自动创建Gmail子标签(Google脚本)

Google apps script 根据电子邮件主题中提取的子字符串自动创建Gmail子标签(Google脚本),google-apps-script,google-sheets,gmail,label,Google Apps Script,Google Sheets,Gmail,Label,我不熟悉谷歌脚本 我一直在尝试根据电子邮件主题中提取的特定ID或数字自动对从供应商处收到的电子邮件进行子标签 例如,电子邮件主题为“供应商A(供应商ID:12349)”。因此,在父标签“Supplier”下,我试图将12349作为引用该特定ID的线程或消息的子标签。当Gmail在主题中收到新ID时,应自动创建子标签,并使用已创建的子标签ID自动标记新收到的电子邮件 我参考了其他论坛的帖子,尝试了很多东西,但没有一个是有效的。我认为最接近的方法是让脚本引用工作表中的某一列,我使用该列提取ID号并基

我不熟悉谷歌脚本

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

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

我参考了其他论坛的帖子,尝试了很多东西,但没有一个是有效的。我认为最接近的方法是让脚本引用工作表中的某一列,我使用该列提取ID号并基于该特定行创建标签。但是,我不断收到错误,因为GmailApp.createLabel(“”)需要(“”)中的name/string

以下是目前为止的脚本:

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

    }
  }
} 
错误:+运行后没有在gmail中创建标签

那么,我有没有办法把这件事做好?或者还有其他我可能错过的方法吗


如果有人能在这方面帮助我,我将不胜感激。

以下是我在发现方法问题后所做的

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

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

parseLabel()是如何调用的。您没有提供任何示例。我还认为这
Logger.log(“label:+GmailApp.createLabel(row))
可能是这个
Logger.log(“标签:+GmailApp.createLabel(行)).getName()你能定义你得到的错误吗?@Cooper parseLabel()?你是说parseEmail()?如果是这样,我已经编辑了脚本的上半部分,以显示我所做的当前脚本。我也尝试过你提到的方法,当我试图在google sheet上收集电子邮件时也会发生同样的错误(例外:无效参数:name)@RafaGuillermo我得到的错误是“例外:无效参数:name”。当我试图将电子邮件收集到电子表格中时,它出现在页面顶部。虽然,在脚本编辑器中运行脚本时未检测到错误。@Cooper抱歉,我不太理解您的问题?但是如果你需要我更具体地说明错误。。我在我的问题中添加了一幅关于错误的图片
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);
             
   }