Google apps script 谷歌表单-电子邮件
我正在考虑在提交谷歌表单时自动触发电子邮件。它工作得很好,但是下面的代码有3个问题Google apps script 谷歌表单-电子邮件,google-apps-script,google-sheets,gmail,google-forms,Google Apps Script,Google Sheets,Gmail,Google Forms,我正在考虑在提交谷歌表单时自动触发电子邮件。它工作得很好,但是下面的代码有3个问题 每次回复都会触发两封电子邮件,而我只想发送一封电子邮件 电子邮件是从“所有者”的ID发送的,而不是在谷歌表单上提交回复的 它应该将所有成功发送的电子邮件的状态捕获为col7中的“email sent”,但它没有这样做 //已成功发送。 var EMAIL_SENT=“EMAIL_SENT”; 函数sendmails2(){ var sheet=SpreadsheetApp.getActiveSheet(); va
//已成功发送。
var EMAIL_SENT=“EMAIL_SENT”;
函数sendmails2(){
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;//要处理的第一行数据
var numRows=sheet.getLastRow();//要处理的行数
var dataRange=sheet.getRange(numRows,2,1,sheet.getLastColumn());
//获取范围中每一行的值。
var data=dataRange.getValues();
对于(变量i=0;i
试着这样做:
function sendEmails() {
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;
var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-startRow+1,sheet.getLastColumn());//I think startRow is a better fit for the first parameter and my guess is that you did't really intend for data.length to be only 1 row.
var data=dataRange.getValues();
for (var i=0;i<data.length;++i) {
var row=data[i];
var emailAddress=row[5];//column 6
var message=Utilities.formatString('Hello,\n\nWe have received an inquiry from your customer in Inbound.\n\nLead No is - %s\n\nKindly arrange a callback.\n\nRegards,\nTeam Inbound\n\nThis is an auto-generated email.',row[1]);
var emailSent = row[7];//column 8
if (emailSent != "EMAIL_SENT") { // Prevents sending duplicates
var subject = "Inbound Inquiry"+ " - " + row[1];//column 2
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 8).setValue("EMAIL_SENT");//column 8 and I don't think it's necessary to flush in the loop
}
}
}
函数sendEmails(){
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;
var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-startRow+1,sheet.getLastColumn());//我认为startRow更适合第一个参数,我猜您并不是真的希望data.length只有一行。
var data=dataRange.getValues();
对于(var i=0;如果对于我们这些不太敏感的人,请您添加一些关于您的答案如何解决OP问题的解释。我可以看到您的数据范围从A列开始,OP在B列;您的范围涵盖所有数据,OP仅一行;您不需要刷新(如果您不介意我这样说的话);然后呢?好吧,我的猜测是OP实际上并不打算只显示一行。所以,是的,这有点猜测。以类似的方式,我不认为OP真的想在这里使用numRows
sheet.getRange(numRows,2,1,sheet.getLastColumn())我认为startRow更有意义。最后,我认为没有必要冲洗。它只是堵塞了循环。听起来很合理。但我仍然对它如何解决OP的三个问题感到困惑。我想布丁的证据在于吃——OP希望在某个时候会作出回应。关于两封电子邮件的问题他的建议可能会有所帮助:
function sendEmails() {
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;
var dataRange=sheet.getRange(startRow,1,sheet.getLastRow()-startRow+1,sheet.getLastColumn());//I think startRow is a better fit for the first parameter and my guess is that you did't really intend for data.length to be only 1 row.
var data=dataRange.getValues();
for (var i=0;i<data.length;++i) {
var row=data[i];
var emailAddress=row[5];//column 6
var message=Utilities.formatString('Hello,\n\nWe have received an inquiry from your customer in Inbound.\n\nLead No is - %s\n\nKindly arrange a callback.\n\nRegards,\nTeam Inbound\n\nThis is an auto-generated email.',row[1]);
var emailSent = row[7];//column 8
if (emailSent != "EMAIL_SENT") { // Prevents sending duplicates
var subject = "Inbound Inquiry"+ " - " + row[1];//column 2
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 8).setValue("EMAIL_SENT");//column 8 and I don't think it's necessary to flush in the loop
}
}
}