Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌脚本起草回复邮件的主题关键字和输入数据从谷歌表_Javascript_Google Apps Script_Google Sheets_Automation_Gmail - Fatal编程技术网

Javascript 谷歌脚本起草回复邮件的主题关键字和输入数据从谷歌表

Javascript 谷歌脚本起草回复邮件的主题关键字和输入数据从谷歌表,javascript,google-apps-script,google-sheets,automation,gmail,Javascript,Google Apps Script,Google Sheets,Automation,Gmail,我是谷歌应用程序脚本的新手,所以我正在寻找一些建议。有多个部分,我做了一些,但我被其他部分卡住了。任何帮助都将不胜感激 我正在尝试制作一个脚本: 起草对包含特定关键字(在正文或主题行中)的电子邮件的回复 我还希望它包括一个从谷歌表单文件输入的数据模板 如果在修改图纸时,可以在不复制的情况下更新草稿,则更可取 我还计划在第二行中包含一行与主题列相对应的值(第一行),但我还没有找到它 有关Google表单的一些详细信息: 每行对应一个不同的人和电子邮件地址,定期给我发电子邮件 前三栏是关于我在草

我是谷歌应用程序脚本的新手,所以我正在寻找一些建议。有多个部分,我做了一些,但我被其他部分卡住了。任何帮助都将不胜感激

我正在尝试制作一个脚本:

  • 起草对包含特定关键字(在正文或主题行中)的电子邮件的回复
  • 我还希望它包括一个从谷歌表单文件输入的数据模板
  • 如果在修改图纸时,可以在不复制的情况下更新草稿,则更可取
  • 我还计划在第二行中包含一行与主题列相对应的值(第一行),但我还没有找到它
  • 有关Google表单的一些详细信息:

    • 每行对应一个不同的人和电子邮件地址,定期给我发电子邮件
    • 前三栏是关于我在草稿正文中包含的人的详细信息
    • 之后的每一列表示我希望在发送给我的电子邮件主题中找到的不同字符串或关键字
    • 下面的行包含两个有图案的码字,在一个单元格中用空格分隔,我希望能够从中进行选择。例如:

      • 3个字母,可以包含字母m、g、r的排列(例如:mmg、rgm、rgg、gmg)

      • 和0-3个字母,只有p(对于ex:p、pp、ppp或空白)

    我希望能够检测不同的代码,并将其分配给可以输入到草稿中的变量


    到目前为止,我所拥有的:

    • 我能够在指定的筛选器内起草电子邮件回复。但是,我只将其设置为回复此人最近的消息。我希望能够通过过滤器进行排序,以便在主题行中包含关键字的特定电子邮件在列中循环时进行排序

    • 我可以将表单中的静态字符串输入到我的电子邮件正文中,但我仍然无法使用有图案的码字

    • 在早期版本中,我可以循环浏览多行,但现在不行了。我以后再看一遍

    这是我的密码:

    function draftEmail() {
      var sheet = SpreadsheetApp.getActiveSheet();    // Use data from the active sheet
      var startRow = 1;                            // First row of data to process
      var numRows = sheet.getLastRow() - 1;        // Number of rows to process
      var lastColumn = sheet.getLastColumn();      // Last column
      var dataRange = sheet.getRange(startRow, 1, numRows, lastColumn) // Fetch the data range of the active sheet
      var data = dataRange.getValues();            // Fetch values for each row in the range
    
      // Work through each row in the spreadsheet
      for (var i = 2; i < data.length; ++i) {
        var row = data[i];  
        // Assign each row a variable
        var grader = row[0];                    // Col A: Grader's name
        var firstName = row[1];                 // Col B: Student's first name
        var studentEmail = row[2];              // Col C: Student's email
        var grade = row[3].split(' ');           // Col D: Grade
        var pgrade = grade[1];
        var hgrade = grade[0];
          for (var n = 1; n < data.length; ++n) {
          var srow = data[n];  
          var subjectCol = srow[3];
    
        var threads = GmailApp.getUserLabelByName('testLabel').getThreads();
    
        for (i=0; i < threads.length; i++)
        {
              var thread = threads[i]; 
              var messages = thread.getMessages(); // get all messages in thread i
              var lastmsg  = messages.length - 1;  // get last message in thread i
    
              var emailTo    = WebSafe(messages[lastmsg].getTo());    // get only email id from To field of last message
              var emailFrom  = WebSafe(messages[lastmsg].getFrom());  // get only email id from FROM field of last message
              var emailCC    = WebSafe(messages[lastmsg].getCc());    // get only email id from CC field of last message
    
    
        // form a new CC header for draft email
            if (emailTo == "")
            {
               var emailCcHdr = emailCC.toString();
            } else
            {
              if (emailCC == "")
              {
                var emailCcHdr = emailTo.toString();
              } else
              {
                var emailCcHdr = emailTo.toString() + "," + emailCC.toString();
              }
            }
    
            var subject  = messages[lastmsg].getSubject().replace(/([\[\(] *)?(RE|FWD?) *([-:;)\]][ :;\])-]*|$)|\]+ *$/igm,"");
            // the above line remove REs and FWDs etc from subject line
    
            var emailmsg = messages[lastmsg].getBody(); // get html content of last message
    
            var emaildate   = messages[lastmsg].getDate(); // get DATE field of last message
    
            var attachments = messages[lastmsg].getAttachments(); // get all attachments of last message
    
            var edate = Utilities.formatDate(emaildate, "IST", "EEE, MMM d, yyyy"); // get date component from emaildate
            var etime = Utilities.formatDate(emaildate, "IST", "h:mm a"); // get time component from emaildate
    
        if (emailFrom.length == 0)
            {
              // if emailFrom is empty, it probably means that you may have written the last message in the thread. Hence 'you'.
              var emailheader = '<html><body>' + 
                                'On' + '&nbsp;' +
                                 edate + '&nbsp;' + 
                                'at' + '&nbsp;' + 
                                 etime +  ',' + '&nbsp;' + 'you' + '&nbsp;' + 'wrote:' + '</body></html>';
            } else 
            {
              var emailheader = '<html><body>' + 
                                'On' + '&nbsp;' +
                                 edate + '&nbsp;' + 
                                'at' + '&nbsp;' + 
                                 etime +  ',' + '&nbsp;' + emailFrom + '&nbsp;' + 'wrote:' + '</body></html>';
            }
              var emailsig = '<html>' + 
                             '<div>your email signature,</div>' +
                             '</html>'; // your email signature i.e. common for all emails.
    
                      // Build the email message
              var emailBody =  '<p>Hi ' + firstName + ',<p>';
                  emailBody += '<p>For ' + subjectCol + ', you will be graded on #1, 2, and 3: <p>';
                  emailBody += '<p>Participation: ' + pgrade + '</p>';
                  emailBody += '<p>HW grade: ' + hgrade + '</p>';
                  emailBody += '<p>If you have any questions, you can email me at ' + grader + '@email.com.<p>';
                  emailBody += '<p>- ' + grader;
    
    
              var draftmsg = emailBody + '<br>' + emailsig + '<br>' + emailheader + '<br>' + emailmsg + '\n'; // message content of draft
    
          // Create the email draft
          messages[lastmsg].createDraftReply(
            " ", // Body (plain text)
            {
            htmlBody: emailBody    // Options: Body (HTML)
            }
          );
    
        }
    
    }
    }
    
    function WebSafe(fullstring)
    {
      var splitString = fullstring.split(",");
      var finalarray = [];
      for (u=0; u < splitString.length; u++)
      {
        var start_pos = splitString[u].indexOf("<") + 1;
        var end_pos   = splitString[u].indexOf(">",start_pos);
        if (!(splitString[u].indexOf("<") === -1 && splitString[u].indexOf(">",start_pos) === -1)) // if < and > do exist in string
        {
          finalarray.push(splitString[u].substring(start_pos, end_pos));
        } else if (!(splitString[u].indexOf("@") === -1))
        {
          finalarray.push(splitString[u]);
        }
      }
      var index = finalarray.indexOf(grader + "@email.com"); // use your email id. if the array contains your email id, it is removed.
      if (index > -1) {finalarray.splice(index, 1);}
      return finalarray
    }
    }
    
    函数draftEmail(){
    var sheet=SpreadsheetApp.getActiveSheet();//使用活动工作表中的数据
    var startRow=1;//要处理的第一行数据
    var numRows=sheet.getLastRow()-1;//要处理的行数
    var lastColumn=sheet.getLastColumn();//最后一列
    var dataRange=sheet.getRange(startRow,1,numRows,lastColumn)//获取活动工作表的数据范围
    var data=dataRange.getValues();//获取范围中每一行的值
    //完成电子表格中的每一行
    对于(变量i=2;i