【问题标题】:Send to multiple emails using google script使用谷歌脚本发送到多个电子邮件
【发布时间】:2020-03-12 14:28:46
【问题描述】:
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 5; // Number of rows to process
  // Fetch the range of cells A2:I6
  var dataRange = sheet.getRange(startRow, 1, numRows, 10);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  var counter = 0;
  var qua_num = [[]];
  for (var i in data) {
    var row = data[i];
    var days = row[8];
    if (days > -14) {
    var emailAddress = row[9]; // First column
      qua_num += [row[0]];
      counter += 1;
    }
  }
  var message = qua_num + ' equipment are approaching due date or out of cal. Please check with QA for replacement or sending the equipment out for re-calibration'; // Second column
  var subject = 'Check Equipment Calibration Alert';
  MailApp.sendEmail(emailAddress, subject, message);
}

当前的代码只允许我从谷歌电子表格发送到一个电子邮件地址。如果每行有不同的电子邮件地址(多行也可以有相同的电子邮件地址),我该如何更改功能?请参阅下面的 google 电子表格示例。

Screenshot of Google Spreadsheet

根据电子表格中的信息,QUA-005 和 QUA-007 满足 if 语句的条件。预期的输出是:

电子邮件 1 到电子邮件地址 1 QUA-005 设备即将到期或超出校准范围。请与 QA 联系以更换或将设备送出进行重新校准。

电子邮件 2 到电子邮件地址 2 QUA-007 设备即将到期或超出校准范围。请与 QA 联系以更换或将设备送出进行重新校准。

如果电子邮件地址相同,则输出为:

QUA-005、QUA-007 设备即将到期或超出校准范围。请与 QA 联系以更换或将设备送出进行重新校准。

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解If there is a different email address in each row (multiple rows could have the same email address as well), how do I change the function?。能详细介绍一下吗?
  • @Tanaike 如果您查看电子表格,有 2 个不同的电子邮件地址。我想将第 1 列中通过 IF 语句的所有项目与各自的电子邮件地址结合起来,并向他们发送电子邮件。我希望这能解释你的问题。我还想抄送其他电子邮件地址。
  • 感谢您的回复。我为我糟糕的英语水平深表歉意。不幸的是,我无法理解all the items in column 1 that have passed the IF statement。那么你能提供你期望的样本输出值吗?通过这个,我想考虑一下问题和解决方案。
  • 感谢您的回复。不幸的是,从您的回复中,我仍然无法理解您的目标。这是由于我的理解力差。我对此深表歉意。当我能正确理解它时,我会想办法。
  • @Tanaike 我添加了这个问题。请看一下

标签: google-apps-script


【解决方案1】:
  • 当“I”列的值大于-14时,您想向“J”列的电子邮件地址发送电子邮件。
  • 当“J”列有相同的电子邮件地址时,您希望汇总“A”列的值并将它们发送到一个电子邮件地址。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改点:

  • 在此修改中,首先,根据从电子表格检索到的值创建一个对象。然后,使用该对象创建并发送电子邮件的内容。

修改后的脚本:

当你的脚本被修改时,请进行如下修改。

发件人:

var counter = 0;
var qua_num = [[]];
for (var i in data) {
  var row = data[i];
  var days = row[8];
  if (days > -14) {
  var emailAddress = row[9]; // First column
    qua_num += [row[0]];
    counter += 1;
  }
}
var message = qua_num + ' equipment are approaching due date or out of cal. Please check with QA for replacement or sending the equipment out for re-calibration'; // Second column
var subject = 'Check Equipment Calibration Alert';
MailApp.sendEmail(emailAddress, subject, message);

收件人:

data.reduce((m, [qua_num,,,,,,,,daysPastCal,emailAddress]) => {
  if (daysPastCal > -14) m.set(emailAddress, m.has(emailAddress) ? [...m.get(emailAddress), qua_num] : [qua_num]);
  return m;
}, new Map())
.forEach((qua_num, emailAddress) => {
  var message = qua_num.join(",") + ' equipment are approaching due date or out of cal. Please check with QA for replacement or sending the equipment out for re-calibration';
  var subject = 'Check Equipment Calibration Alert';
  MailApp.sendEmail(emailAddress, subject, message);
});

注意:

  • 在这种情况下,请在脚本编辑器中启用 V8。

参考资料:

【讨论】:

  • 感谢@tanaike 的帮助。我现在正在尝试聚合多个列的值(不仅仅是 A 列)。在这种情况下我该如何映射?非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多