google-apps-script - Apps 脚本邮件合并:将值从“EMAIL NOT SENT YET”设置为“EMAIL SENT”
问题描述
问题:
我的邮件合并脚本使用 html 模板和收件人列表发送电子邮件。收件人列表由 16 列组成(第一列是 A,最后一列是 P)。发送电子邮件后,第 11 列(即“K”列)中的值应从每个收件人的“ EMAIL NOT SENT YET ”更改为“ EMAIL SENT ”。并且在第 11 列(因此,“K”列)中已经有“EMAIL SENT”的任何收件人都不应再收到一封电子邮件。
尝试的解决方案:
邮件合并的脚本如下。正如你肯定意识到的那样,我被困在代码的最后一部分,我根本不知道如何包含一个 IF 语句来完成工作。
问题:
我应该更改脚本的哪一部分以确保A)为第 11 列中的每个收件人自动更新状态(因此,列“K)和B)已经收到电子邮件的人没有收到另一封邮件?
非常感谢您的帮助!
function JustSendEmail() {
// variables to reference the sheet and its content
var anrede = 2;
var nachname = 3;
var emailAdresse = 5;
var terminTag = 6;
var terminUhrzeit = 8;
var terminURL = 9;
var emailTemp = HtmlService.createTemplateFromFile('emailEinladung');
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("terminBestaetigen");
var data = ws.getRange("A3:K" + ws.getLastRow()).getValues();
// replace html template content with values from google sheet list and sent out the personalized content to each recipient
data.forEach(function (row) {
emailTemp.anrede1 = (row[anrede]);
emailTemp.nachname1 = (row[nachname]);
emailTemp.emailAdresse1 = (row[emailAdresse]);
emailTemp.terminTag1 = (row[terminTag]);
emailTemp.terminUhrzeit1 = (row[terminUhrzeit]);
emailTemp.terminURL1 = (row[terminURL]);
var htmlMessage = emailTemp.evaluate().getContent();
// this is where i am struggling to include an IF-statement,
// so that A) only recipient with status "EMAIL NOT SENT YET" in column "K" get an email,
// and B) the status of anybody who has already received an email is marked "EMAIL SENT" in column "K".
GmailApp.sendEmail(row[emailAdresse],
betreff,
"Dies ist eine Nachricht im HTML-Format. Sie müßen Ihre Email-Software entsprechend einrichten.",
{ htmlBody: htmlMessage, replyTo: "xxxx@testingappsscript.edu" }
);
});
}
解决方案
function JustSendEmail() {
// variables to reference the sheet and its content
// you can get all of these with three lines of code one to get the header array flattened and one to create an object and a forEach to populate the object with `obj[h] = i`
const anrede = 2;
const nachname = 3;
const emailAdresse = 5;
const terminTag = 6;
const terminUhrzeit = 8;
const terminURL = 9;
let emailTemp = HtmlService.createTemplateFromFile('emailEinladung');
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("terminBestaetigen");
const sr = 3;//start row of data
const data = sh.getRange(sr, 1, sh.getLastRow() - sr + 1, 11).getValues();
data.forEach((row, i) => {
if (row[10] == "EMAIL NOT SENT YET") {
emailTemp.anrede1 = (row[anrede]);
emailTemp.nachname1 = (row[nachname]);
emailTemp.emailAdresse1 = (row[emailAdresse]);
emailTemp.terminTag1 = (row[terminTag]);
emailTemp.terminUhrzeit1 = (row[terminUhrzeit]);
emailTemp.terminURL1 = (row[terminURL]);
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(row[emailAdresse], betreff, "Dies ist eine Nachricht im HTML-Format. Sie müßen Ihre Email-Software entsprechend einrichten.", { htmlBody: htmlMessage, replyTo: "xxxx@testingappsscript.edu" });
sh.getRange(i + sr, 11).setValue("EMAIL SENT");//stops emails from being sent again
}
});
}
推荐阅读
- java - Java 9 模块 - 第三方库依赖冲突
- azure-devops - 在托管的 Azure 管道中初始化容器作业时出错
- gitlab - 为 Git 脚本调用特定的运行器
- ios - 当引用循环不太可能发生时,@escaping 闭包中的隐式 self Swift 5.3
- django - 如何将flutter Web_socket_channel包与Django Channels连接起来?
- azure - 显示已删除函数的 Azure 持久函数日志流
- sql - SQL 查询在同一个表中查找 id 但不同的时间戳事件(群组)
- git - GitLab runner 获取子模块的“主机密钥验证失败”
- flutter - FAILURE:构建失败并出现异常。但没有迹象表明哪个包可能导致错误。在 Android Studio 中使用 Flutter
- eclipse - Eclipse:使 ESC 键专注于活动代码窗口