Google Script电子邮件确认

时间:2014-05-22 13:13:00

标签: google-apps-script google-sheets

我的目标是拥有一个填写电子表格的表单。表单的一部分将有一个电子邮件地址,另一个表单将完成任务。如果我在完成任务的情况下将电子表格从no切换为yes,我希望它能够通过电子邮件向用户发送确认信息。我不知道是否有可能,但任何帮助都会受到赞赏。

编辑:

这段代码是我现在要完成的任务。我喜欢它的设置方式,但我想尝试解决两个主要问题。首先是当脚本运行时让我说我跳过一行脚本会失败并且不会继续尝试更多的条目。第二个问题是我不知道如何控制谁发送脚本电子邮件过去它要求你好,并在第一次运行脚本。

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

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1000;   // Number of rows to process
  // Fetch the range of cells M2:N1000
  var dataRange = sheet.getRange(startRow, 1, numRows, 1000)
  // 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[12];  // First column
    var message = row[13];       // Second column
    var emailSent = row[14];     // Third column
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "Help Desk Completion Response";
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 15).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

1 个答案:

答案 0 :(得分:0)

电子邮件将始终以运行脚本的用户身份发送。您可以将脚本作为可安装触发器的结果运行,您可以在任何有权访问该脚本的Google帐户上设置该脚本,然后该脚本会将该电子邮件作为该Google帐户发送。例如,让脚本每天运行一次使用基于时间的触发器并检查EMAIL_SENT和TASK_COMPLETE的值,如果任务已完成但未发送电子邮件,则让脚本发送电子邮件。这也应解决空行问题,因为当TASK_COMPLETE为空而不是“是”时,它不会尝试发送电子邮件。

如果您想让脚本立即发送电子邮件,您需要一个基于编辑的触发器。在这种情况下,您甚至可能不需要加载整个电子表格,但简单的e.range.offset()就足够了。

类似的东西:

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

function sendEmails(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var columnNumber = e.range.getColumn(); //check if the changed value is TASK_COMPLETE
  if(columnNumber = 5 && e.value = "Yes") {
    var row = e.range.offset(0, -5, 1, sheet.getLastColumn()).getValues();
    var emailAddress = row[12];  // First column
    var message = row[13];       // Second column
    var emailSent = row[14];     // Third column
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "Help Desk Completion Response";
      MailApp.sendEmail(emailAddress, subject, message);
      e.range.offset(0,9).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

当然,确切的偏移量取决于电子表格中的确切位置。