此問題已在此處和此處詳細討論。但是我所看到和分析的所有腳本都沒有解決我的問題。這就是為什么我呼吁所有聰明人來幫助我。
以下是我的問題的詳細資訊:
問題:
我當前的腳本(見下文)向我的作業表中列出的每個收件人發送一封html 電子郵件,然后將接收該 html 電子郵件的每個收件人的狀態設定為 K 列中的“EMAIL SENT”。現在我想再發送 3 個我已經在 L、M 和 N 列中為每個收件人指定的日期準確地將 html 電子郵件發送給這些收件人中的每一個。
示例:收件人 A 在 11.10.2021 收到第一封 html 電子郵件(使用的格式:日/月/年),他計劃在 25.10.2021 收到第二封 html 電子郵件,在 2021 年 10 月 27 日收到第三封 html 電子郵件,第四封/ 2021 年 10 月 29 日的最后一封 html 電子郵件。收件人 A 的這些日期在 L 列 (25.10.2021)、M 列 (27.10.2021) 和 N 列 (29.10.2021) 中指定。
問題:
我如何確保每個收件人在 L、M 和 N 列中為其指定的日期收到額外的電子郵件?
我真的很感激任何幫助或提示來解決這個問題。
這是我當前的腳本:
function sendEmail() {
// variables for the html template (html file) and the list of recipients (google sheet)
const anrede = 2;
const nachname = 3;
const emailAdresse = 5;
const terminTag = 6;
const terminUhrzeit = 8;
const terminURL = 9;
let emailTemp = HtmlService.createTemplateFromFile('HTML_TEMPLATE');
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LIST_OF_RECIPIENTS");
// send email based on my html template and recipients list
var adminV = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("admin"); // open the sheet containing the subject of the email ("subject in German is "betreff")
var betreff = adminV.getRange("A20").getValue(); // get the actual content of the sheet containing the subject ("subject in German is "betreff")
var aliases = GmailApp.getAliases(); // get the alises of my gmail-account
const sr = 3;//start row of data/recipients list from the google sheet
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, "This is an html email. Please change your seting to be able to read it.",
{ from: aliases[0], htmlBody: htmlMessage, replyTo: aliases[0] });
sh.getRange(i sr, 11).setValue("EMAIL SENT");//stops emails this particular email from being sent again, if the recipient has already received it.
}
});
}
uj5u.com熱心網友回復:
由于您想發送未來日期的電子郵件,因此最好的解決方案是使用基于時間的觸發器。這樣,您的函式sendEmail最終將每天運行,并通過檢查當前日期和,列中的日期L,相應地發送電子郵件。MN
function sendEmail() {
let today = new Date();
let todayDate = Utilities.formatDate(today, "GMT", "dd.mm.yyyy").toString();
// the rest of the code
// add the rest of it in the for loop
data.forEach((row, i) => {
let lCell = sh.getRange(i 1, 12).getValue();
let mCell = sh.getRange(i 1, 13).getValue();
let nCell = sh.getRange(i 1, 14).getValue();
if (lCell == todayDate || mCell == todayDate || nCell == todayDate) {
// send email
}
}
}
function createTimeDrivenTrigger() {
ScriptApp.newTrigger('sendEmail')
.timeBased()
.everyDays(1)
.create();
}
至于createTimeDrivenTrigger函式,這是為函式創建觸發器的sendEmail函式,通過使用everyDays(1)你可以確保它每天都在運行。
參考
- Apps 腳本以編程方式管理觸發器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332716.html
標籤:谷歌应用程序脚本
上一篇:撰寫腳本來比較值?[復制]
