我如何确保已发送的电子邮件在验证过程后传递到正确的行

How do i ensure that Email Sent gets passed to the right Row after a Verification Process

所以我有3个功能

  1. 函数 afterFormSubmit(e) 这接收函数调用并在提交时生成 PDF
  2. 函数sendMail_Verification() 这将发送电子邮件以验证提交
  3. 函数发送邮件() 这会将带有生成的 PDF
  4. 的电子邮件发送给受访者

当前问题

  1. 我似乎无法在批准 (e) @afterFormSubmit 的 cos 后生成 pdf,所以目前在提交时生成。

  2. 当我有 2 个来自受访者的条目时,我要验证每个条目,SendMail() 函数有一个 if 语句 来检查第一个是否受访者提交的内容已在第 8 列 获得批准 ,然后触发电子邮件。 但是即使第二个受访者在其行上没有批准,它也会将电子邮件发送给第一个受访者和第二个受访者 使用此 ws.getRange(2,12,ws.getLastRow()-1,1).setValue(EMAIL_SENT);通过 Email_Sent

非常感谢任何建议

代码如下

 var Approve = 'Approve';

 var Reject = 'Reject';

 var EMAIL_SENT = 'EMAIL_SENT';

function afterFormSubmit(e){
const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
var su = ss.getRange(ss.getLastRow()-1, 9).getValue();
var ku = ss.getRange(ss.getLastRow()-1, 9).getValue();
var check = ss.getRange(ss.getLastRow()-1, 8).getValue();
if(su == ""){
  var check = ss.getRange(ss.getLastRow()-1, 8).getValue();
  var checke = ss.getRange(ss.getLastRow()-1, 11).getValue();
  var checkv = ss.getRange(ss.getLastRow()-1, 12).getValue();

  const info = e.namedValues;
  const pdfFile = createPDF(info);
  const entryRow = e.range.getRow();

  const ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
  ws.getRange(entryRow, 9).setValue(pdfFile.getUrl());
  ws.getRange(entryRow, 10).setValue(pdfFile.getName());
  }
  if(check == "" && checke != EMAIL_SENT){
  assignEditUrls();
  sendMail_Verification();
  }
  if(su == ku){
  sendMail();
 }
 sendMail_Rejection();
}


function sendMail_Verification(){
var A = 0;var B = 1;
var C = 2;var D = 3;
var E = 4;var F = 5;
var G = 6;var H = 7;
var I = 8; var J = 9; 
var e_mail_x = "##";
var K = 10; 
var L = 11; 
var M = 12;
var emailTemp = HtmlService.createTemplateFromFile("verification_Email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
var lr = ws.getLastRow();
var data = ws.getRange("A2:M" + ws.getLastRow()).getValues();
data = data.filter(function(r){return r[10] != EMAIL_SENT});
data.forEach(function(row){
emailTemp.A = row[A];
emailTemp.B = row[B];
emailTemp.C = row[C]; 
emailTemp.D = row[D];
emailTemp.F = row[F];
emailTemp.G = row[G];
emailTemp.H = row[H];
emailTemp.I = row[I];
emailTemp.J = row[J];
emailTemp.K = row[K];
emailTemp.L = row[L];
emailTemp.M = row[M];

var hmtlMessage = emailTemp.evaluate().getContent();
var name = "###";
var subject = "Verification for " + row[D] + " - "+ row[A];

GmailApp.sendEmail(
    e_mail_x,
    subject, 
    "Your email doesnt support HTML",
    //Passing objects
    {name: name, htmlBody: hmtlMessage}
    
  );
  
});
ws.getRange(2,11,ws.getLastRow()-1,1).setValue(EMAIL_SENT);
 }


 function sendMail(){
 const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
 var lr = ss.getLastRow();
 var su = ss.getRange(ss.getLastRow()-1, 9).getValue();
 var ku = ss.getRange(ss.getLastRow()-1, 9).getValue();
 var check = ss.getRange(ss.getLastRow()-1, 8).getValue();
 var checkv = ss.getRange(ss.getLastRow()-1, 12).getValue();
 if(check == Approve && checkv != EMAIL_SENT){
   var A = 0;var B = 1;
   var C = 2;var D = 3;
   var E = 4;var F = 5;
   var G = 6;var H = 7;
   var I = 8; var J = 9;
   var emailTemp = HtmlService.createTemplateFromFile("email");
   var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
   var lr = ws.getLastRow();
   var data = ws.getRange("A2:L" + ws.getLastRow()).getValues();
   data.forEach(function(row){
   emailTemp.A = row[A];
   emailTemp.B = row[B];
   emailTemp.C = row[C]; 
   emailTemp.D = row[D];
   emailTemp.F = row[F];
   emailTemp.G = row[G];
   emailTemp.H = row[H];
   emailTemp.I = row[I];
  
   var hmtlMessage = emailTemp.evaluate().getContent();
   var name = "###";
   var subject = "Submission for " + row[D] + " - "+ row[A];
  
   GmailApp.sendEmail(
   row[E],
   subject, 
    "Your email doesnt support HTML",
    //Passing objects
    {name: name, htmlBody: hmtlMessage, /*attachments: [pdfFile]*/}
  );
});
 ws.getRange(2,12,ws.getLastRow()-1,1).setValue(EMAIL_SENT);
 } 

}
  1. 为 'approve' 创建一个 'listener' 提交并移动生成 pdf 功能
function afterFormSubmit(e) {
  /* ... */

  /* Check whether it is 'approve' submit */
  // const user = e.response.getRespondentEmail();
  const responses = e.response.getItemResponses();
  const o = {};
  for (const response of responses){
    const question = response.getItem().getTitle();
    const answer = response.getResponse();
    o[question] = answer;
  }
  if (o['Password Question Title'] == 'PASSWORD') {
    if (o['Approve Question Title'] == Approve) {
      /* generated PDF */
    }
  }
}
  1. 请更正您的条件
var su = ss.getRange(ss.getLastRow()-1, 9).getValue();
var ku = ss.getRange(ss.getLastRow()-1, 9).getValue();

  if(su == ku){
  sendMail();
 }

function afterFormSubmit(e){

      const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
      var su = ss.getRange(ss.getLastRow(), 9).getValue();
      var ku = ss.getRange(ss.getLastRow(), 9).getValue();
      var check = ss.getRange(ss.getLastRow(), 8).getValue();
      var checke = ss.getRange(ss.getLastRow(), 11).getValue();
      var checkv = ss.getRange(ss.getLastRow(), 12).getValue();
      const entryRow = e.range.getRow();
      const responses = e.response.getItemResponses();
      if(su == ""){
       const o = {};
        for (const response of responses){
          const question = response.getItem().getTitle();
          const answer = response.getResponse();
          o[question] = answer;
        }
       if (o['Decision'] == Approve) {
      /* generated PDF */
      const info = e.namedValues;
      const pdfFile = createPDF(info);
      const entryRow = e.range.getRow();
      const ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People");
      ws.getRange(entryRow, 9).setValue(pdfFile.getUrl());
      ws.getRange(entryRow, 10).setValue(pdfFile.getName());
      } 
    }
     if(check == "" && checke != EMAIL_SENT){
       assignEditUrls();
       sendMail_Verification();
     }
       if(check == Approve && checkv != EMAIL_SENT){
        if(su == ku){
          sendMail();
         //ss.getRange(activeRow,12).setValue(EMAIL_SENT);
        }
       }
/* ... */

为了让它工作,我将 GmailApp.sendEmail() 放在回调函数之外,并使用 entryRow 设置活动行的值。

)};
var subA = ss.getRange(entryRow, 1).getValue();
var subD = ss.getRange(entryRow, 4).getValue();
var hmtlMessage = emailTemp.evaluate().getContent();
var name = "###";
var subject = "### Verification for " + subD + " - "+ subA;

GmailApp.sendEmail(
    e_mail_x,
    subject, 
    "Your email doesnt support HTML",
    {name: name, htmlBody: hmtlMessage}
  );

ss.getRange(entryRow, 11).setValue(EMAIL_SENT);
}