Отправить электронную почту с или без встроенных изображений в зависимости от значения в ячейке - PullRequest
1 голос
/ 21 марта 2020

Добрый день. Я использую приведенный ниже код для отправки электронных писем со встроенными изображениями, полученными по идентификатору из ячейки электронной таблицы. Однако, если ячейка с идентификатором встроенного изображения пуста, сценарий не отправляет сообщение. Есть ли способ настроить этот код, чтобы он работал в обоих случаях? (со значением ID в ячейке и без него) Спасибо


  var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
  var lr = ss.getLastRow();

  var quotaLeft = MailApp.getRemainingDailyQuota();
  //Logger.log(quotaLeft);

  if((lr-1) > quotaLeft) {
     Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + (lr-1) + " emails. Emails were not send.");
  } else {



    for (var i = 2;i<=lr;i++){


      var currentEmail = ss.getRange(i, 1).getValue();
      var currentSubject = ss.getRange(i, 2).getValue();
      var templateText = ss.getRange(i, 3).getValue();
      var currentname = ss.getRange(i, 4).getValue();
      var reply = ss.getRange(i, 5).getValue();


      Logger.log("Cell: " + ss.getRange(i, 6).getA1Notation());
      Logger.log("Image: "+ DriveApp.getFileById(ss.getRange(i, 6).getValue()));

      var image = DriveApp.getFileById(ss.getRange(i, 6).getValue()).getBlob();

      var message = templateText.replace("{name}",currentname);
      message += "<br/><br/><img src=\"cid:sampleImage\">";

      MailApp.sendEmail({

        to: currentEmail,
        replyTo: reply,
        subject: currentSubject,
        htmlBody: message,
        inlineImages: {sampleImage: image},    
      });


    } //close for loop

  } //close else statement

} //close sendEmails```

1 Ответ

3 голосов
/ 21 марта 2020

Это должно сделать.

Изменения также будут обнаружены, и может возникнуть ошибка, если идентификатор изображения неверен или формат файла неверен.

  function sendMail(){

  var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
  var lr = ss.getLastRow();

  var quotaLeft = MailApp.getRemainingDailyQuota();
  //Logger.log(quotaLeft);

   if((lr-1) > quotaLeft) {
     Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + 
    (lr-1) + " emails. Emails were not send.");
   } else {

    for (var i = 2;i<=lr;i++){

  var currentEmail = ss.getRange(i, 1).getValue();
  var currentSubject = ss.getRange(i, 2).getValue();
  var templateText = ss.getRange(i, 3).getValue();
  var currentname = ss.getRange(i, 4).getValue();
  var reply = ss.getRange(i, 5).getValue();
  var imageFile = ss.getRange(i, 6).getValue();
  var image = ""
   Logger.log("Cell: " + ss.getRange(i, 6).getA1Notation());
   Logger.log("Image: "+ DriveApp.getFileById(ss.getRange(i, 6).getValue()));

    if(imageFile){
     try{
    image = DriveApp.getFileById(imageFile).getBlob();
      } catch (e) {
   templateText += "<p>Image merge failed: " + e;         
   }
  }

  var message = templateText.replace("{name}",currentname);
  message += "<br/><br/><img src=\"cid:sampleImage\">";

  if(image){
  MailApp.sendEmail({
    to: currentEmail,
    replyTo: reply,
    subject: currentSubject,
    htmlBody: message,
    inlineImages: {sampleImage: image},    
  });

    } else {

  MailApp.sendEmail({
    to: currentEmail,
    replyTo: reply,
    subject: currentSubject,
    htmlBody: message,  
  });
}

    } //close for loop

  } //close else statement

 } //close sendEmails```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...