Отправка автоматического c электронного письма по указанному c дню месяца в зависимости от дня, введенного в ячейку - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь отправить электронное письмо из скрипта Служб Google в указанный c день месяца, основанный на дне, когда пользователь входит в ячейку на листе.

В настоящее время я использую формулу как показано ниже для отправки электронных писем, которые отправляются пользователям на основе значений ячеек:

function sendChangeDetailsEmail() {
  var sh = SpreadsheetApp.getActive().getSheetByName("BALANCE SHEET");
  var data1 = sh.getRange("G2").getValues(); //USED AS DATA IN THE EMAIL BODY from values in the sheet
  var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("BALANCE SHEET").getRange("G2"); 
  var emailRange1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("BALANCE SHEET").getRange("G1"); 
  var emailAddress = emailRange.getValues();
  var recipient = emailRange1.getValues();
  var message = 'Hello ' + recipient + "\r\r" + 'Please see the current amount that needs paying off: ' + data1 + "\r\r" + 'Many Thanks';
  var subject = 'REMINDER - Amount Due';
    MailApp.sendEmail(emailAddress, subject, message);
}

Поскольку лист будет использоваться как отдельный do c для каждого пользователя, пользователь будет вводить дату в ячейку M3: Конфигурация, когда они хотят, чтобы напоминание было отправлено, и они будут вводить только номер даты месяца, например, 25

Кто-нибудь знает, как я могу это сделать, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

У меня теперь есть скрипт, который я взял и сильно модифицированный от Tiller (https://help.tillerhq.com/en/articles/1876993-can-tiller-send-me-bill-due-date-reminders)

Мой скрипт такой же, как и ниже, и не включает такие вещи, как htmlBody но я добавил к нему много других функций:

function myReminders() {
// this runs based on daily trigger
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(""); //sheet name where the table is

  var range = sheet.getDataRange();
  var values = range.getDisplayValues();

  var lastRow = range.getLastRow();

  var curDate = values[9][5] //where on the sheet the curr date is

  var anyMatches = false;

var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("").getRange("G2"); //where the email address is
var emailRange1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("").getRange("G1"); //where the name of recipient is
var email = emailRange.getValues(); //gets the values for above
var recipient = emailRange1.getValues(); //gets the values for above
var subject = ''; //enter subject for email here

  var message = 'Hello ' + recipient + ',' + "\r\r" + '//enter body here' + "\r\r";


  for (var i = 1; i < lastRow; i++)  
  {  
   // if today matches the alert date, send an alert

   if (values[i][3].toString() == curDate.toString())
   {  
     // add a message for this row if date matches
     message = message + 'Your ' + values[i][0] + ' balance needs paying off before the ' + values[i][7] + ' ' + values[i][9] + '.' + "\r\r" + 'The current balance on the account is ' + values[i][6] + '.' + "\r\r"; //enter additional body based on row here - this allows for multiple messages to sent from the sheet without creating multiple 'emails'

       anyMatches = true;  
   }  
  }  // ends for loop

  // footer for message
 message = message + //footer message;


 if (anyMatches)
 { // send an email   
      MailApp.sendEmail(email,subject,message);
  } 

 }

Надеюсь, это поможет кому-то, кто ищет то же самое:)

0 голосов
/ 16 февраля 2020

Отправка электронной почты один раз в месяц

function sendChangeDetailsEmail() {
  var ss=SpreadsheetApp.getActive();
  var sh = ss.getSheetByName("BALANCE SHEET");
  var dt=new Date();
  var today=dt.getDate();
  var days=new Date(dt.getFullYear(),dt.getMonth()+1,0).getDate();//number of days in this month
  var emailDay=sh.getRange('M3').getValue();
  if(emailDay>0 && emailDay<=Days && emailDay==today) {
    var data1 = sh.getRange("G2").getValue(); 
    var emailRange = ss.getSheetByName("BALANCE SHEET").getRange("G2"); 
    var emailRange1 = ss.getSheetByName("BALANCE SHEET").getRange("G1"); 
    var emailAddress = emailRange.getValue();
    var recipient = emailRange1.getValue();
    var message = 'Hello ' + recipient + "\r\r" + 'Please see the current amount that needs paying off: ' + data1 + "\r\r" + 'Many Thanks';
    var subject = 'REMINDER - Amount Due';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

Запустите следующую функцию только один раз и установите флажок Редактировать / Триггер текущего проекта, чтобы убедиться, что создан один и только один триггер.

function createSendChangeDetailsEmail() {
  ScriptApp.newTrigger('sendChangeDetailsEmail').timeBased().everyDays(1).atHour(6).create();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...