如何在更新时自动从工作表发送电子邮件?

时间:2017-11-22 19:37:05

标签: email google-apps-script google-sheets

我在Google表格论坛上发布了此问题,并在此处寻求帮助。 *请注意,我不是编码员,我刚刚开始使用这样的东西。

我创建了一个包含3页的工作簿。它与表单相关联,因此当人们提交他们的评论时,答案会在第一张表格上收集,在第二张表格上计算,而任何总分高于3.9的提交都会将电子邮件地址移至第三张表格它将在哪里发送一封后续电子邮件。

这是指向工作表副本的链接: https://docs.google.com/spreadsheets/d/15p7_M4guRWCVHG-acRAheAROmh9t4wk3GWD_x0_rl90/edit?usp=sharing

除最后一页外,一切正常:我无法弄清楚如何在工作表更新时自动发送电子邮件。我已经设置了触发器,以便在工作表更新时运行它,但无济于事 - 我必须手动进入并单击"运行"按钮发送电子邮件。 (当我这样做时,会弹出'无法发送电子邮件:没有收件人(第21行,文件"代码")'但电子邮件仍然成功发送。)

我使用的公式是这样的:(我也尝试过交换" sendEmails2"使用" autoResponder"但这也没有改变任何东西。)任何人都可以告诉我这有什么问题?或者有更好的方法来自动发送电子邮件吗?

// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
   var sheet = SpreadsheetApp.getActiveSheet();
   var startRow = 2;  // First row of data to process
   var numRows = 20000;   // Number of rows to process
   // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var emailSent = row[2];     // Third column
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "Sending emails from a Spreadsheet";
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is  
interrupted
      SpreadsheetApp.flush();
  }
 }
}

1 个答案:

答案 0 :(得分:0)

这应该这样做:

function sendEmails2(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Automatic Emails');
  var rg=sh.getRange(2,1,sh.getLastRow(), 3);
  var vA=rg.getValues();
  for (var i=0;i<vA.length;i++){
    var emailAddress = vA[i][0];
    var message = vA[i][1];       
    var emailSent = vA[i][2];     
    var subject = "Sending emails from a Spreadsheet";
    if(emailSent != 'EMAIL_SENT'){
      MailApp.sendEmail(emailAddress, subject, message);
      sh.getRange(2 + i,3).setValue('EMAIL_SENT');
    }
  }
}

别忘了onFormSubmit:

enter image description here