我如何确保已发送的电子邮件在验证过程后传递到正确的行
How do i ensure that Email Sent gets passed to the right Row after a Verification Process
所以我有3个功能
- 函数 afterFormSubmit(e)
这接收函数调用并在提交时生成 PDF
- 函数sendMail_Verification()
这将发送电子邮件以验证提交
- 函数发送邮件()
这会将带有生成的 PDF
的电子邮件发送给受访者
当前问题
我似乎无法在批准 (e) @afterFormSubmit 的 cos 后生成 pdf,所以目前在提交时生成。
当我有 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);
}
}
- 为 '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 */
}
}
}
- 请更正您的条件
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);
}
所以我有3个功能
- 函数 afterFormSubmit(e) 这接收函数调用并在提交时生成 PDF
- 函数sendMail_Verification() 这将发送电子邮件以验证提交
- 函数发送邮件() 这会将带有生成的 PDF 的电子邮件发送给受访者
当前问题
我似乎无法在批准 (e) @afterFormSubmit 的 cos 后生成 pdf,所以目前在提交时生成。
当我有 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);
}
}
- 为 '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 */
}
}
}
- 请更正您的条件
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);
}