我正在努力编写一个应用程序脚本以根据日期触发自动电子邮件。我已经审查了其他问题/答案,但无法正确解决。我的Google表格如下:
我的警报数据在名为“ H&S评论”的工作表中。 我的电子邮件在“电子邮件警报”表的A1单元格中。
发送电子邮件的触发日期是“ H&S评论”表的J列,我认为可以针对此日期和单元格J1(今天的日期)编写代码。
Column J = date email to be sent
Column I = first name of email recipient
Column H = email address
Column B = task per message
Column C = description per message
我的代码称为function
sendEmails`。您将看到它需要您的专业知识。
此外,我希望可以将警报写到电子邮件收件人的Google日历,但不确定是否可以。
答案 0 :(得分:1)
这是您的脚本中的代码,已修改为当J列上的日期与J1中的日期匹配时发送电子邮件。我建议您将代码更改为使用getValues()[1]并循环生成的数组,而不是每次都使用getValue(),这样会优化得多,并且会阻止您达到Google配额[2]。
function sendEmails() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("H&S Reviews").activate();
var lastRow = sheet.getLastRow();
var message = spreadsheet.getSheetByName("Email Alerts").getRange(1,1).getValue();
for (var i = 3;i<=lastRow;i++){
var emailAddress = sheet.getRange(i, 8).getValue();
var firstName = sheet.getRange(i, 9).getValue();
var todaysDate = sheet.getRange(1, 10).getValue();
var date = sheet.getRange(i, 6).getValue();
date = Utilities.formatDate(date,'GMT+0200','dd MMMM yyyy');
var task = sheet.getRange(i, 2).getValue();
var description = sheet.getRange(i, 3).getValue();
var messageBody = message.replace("{name}",firstName).replace("{Task}",task).replace("{Description}",description).replace("{Date}",date);
var subject = "Health & Safety Review Task";
var sendDate = sheet.getRange(i, 10).getValue();
var sheetDate = new Date(sendDate);
Sdate=Utilities.formatDate(todaysDate,'GMT+0200','yyyy:MM:dd')
SsheetDate=Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
Logger.log(Sdate+' =? '+SsheetDate)
if (Sdate == SsheetDate){
var subject = "Health & Safety Review Task";
MailApp.sendEmail(emailAddress, subject, messageBody);
Logger.log('SENT :'+emailAddress+' '+subject+' '+messageBody)
}
}
}
[1] https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()
[2] https://developers.google.com/apps-script/guides/services/quotas