使用 Google Apps 脚本自动发送电子邮件

问题描述 投票:0回答:2

我正在寻求有关 Google Apps 脚本的帮助,我正在尝试设置该脚本以自动从 Google 表格发送电子邮件。我的目标是让脚本在工作表中的

Status
列更新为
Send
时自动发送电子邮件。

这是我到目前为止所做的:

我创建了一个 Google 表格,其中包含

First Name
Last Name
Email
Status
的列。

我编写了一个脚本,当

Status
列更新为“发送”时,应该发送电子邮件。但是,我遇到了脚本未按预期触发的问题。我不是开发人员,所以我发现自己解决问题很有挑战性。

有人可以检查一下我的脚本并就可能出现的问题提供指导吗?任何帮助或指示将不胜感激。

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();

  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var firstName = row[0];
    var lastName = row[1];
    var emailAddress = row[2];
    var emailSent = row[3];
    if (emailSent == 'Gửi') { // Chỉ gửi email khi cột 'Status' là 'Gửi'
      var subject = 'Chủ đề Email của Bạn';
      var message = createEmailTemplate(firstName, lastName);
      MailApp.sendEmail(emailAddress, subject, "", { htmlBody: message });
      sheet.getRange(i + 1, 4).setValue('Đã gửi');
      SpreadsheetApp.flush();
    }
  }
}

function createEmailTemplate(firstName, lastName) {
  var htmlTemplate = HtmlService.createTemplateFromFile('EmailTemplate');
  htmlTemplate.firstName = firstName;
  htmlTemplate.lastName = lastName;
  return htmlTemplate.evaluate().getContent();
}
google-sheets google-apps-script gmail
2个回答
0
投票

建议的解决方案

注意:似乎 onEdit(e) 不起作用,因为它需要授权,并且根据 Restrictions:

他们无法访问需要授权服务。例如,简单的触发器无法发送电子邮件,因为Gmail 服务需要授权,但简单的触发器可以使用匿名的语言服务翻译短语。

相反,请使用手动管理触发器来运行该函数。单击 Google Apps 脚本编辑器左侧的 触发器 > + 添加触发器

触发图像示例

电子表格

Gmail


0
投票

您需要将该函数命名为 onEdit,以便每当在电子表格中编辑值时自动触发在此处输入代码。

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  var column = range.getColumn();
  // If the value is edited is in the status column (4th column) in the the sheet which has your data, only thencontinue with further operations.
  // Change Sheet1 to whatever is the name of your sheet.
  if (sheet.getName() !== 'Sheet1' && column == 4) {
    var dataRange = sheet.getDataRange();
    var data = dataRange.getValues();
    for (var i = 1; i < data.length; i++) {
      var row = data[i];
      var firstName = row[0];
      var lastName = row[1];
      var emailAddress = row[2];
      var emailSent = row[3];
      if (emailSent == 'Gửi') { // Chỉ gửi email khi cột 'Status' là 'Gửi'
        var subject = 'Chủ đề Email của Bạn';
        var message = createEmailTemplate(firstName, lastName);
        MailApp.sendEmail(emailAddress, subject, "", { htmlBody: message });
        sheet.getRange(i + 1, 4).setValue('Đã gửi');
        SpreadsheetApp.flush();
      }
    }
  }
}

function createEmailTemplate(firstName, lastName) {
  var htmlTemplate = HtmlService.createTemplateFromFile('EmailTemplate');
  htmlTemplate.firstName = firstName;
  htmlTemplate.lastName = lastName;
  return htmlTemplate.evaluate().getContent();
}

这应该有效。以防万一您仍然遇到困难,请让我知道日志中的确切问题/错误。

© www.soinside.com 2019 - 2024. All rights reserved.