如何设置按日期触发的自动电子邮件警报

时间:2019-11-11 01:56:15

标签: google-apps-script google-sheets

我正在努力编写一个应用程序脚本以根据日期触发自动电子邮件。我已经审查了其他问题/答案,但无法正确解决。我的Google表格如下:

Google Sheet

我的警报数据在名为“ 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日历,但不确定是否可以。

1 个答案:

答案 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