Отправить письмо с встроенным изображением и текстом в теле - PullRequest
1 голос
/ 20 марта 2020

Я использую этот код для отправки электронных писем, которые содержат встроенное изображение и некоторый текст (оба взяты из вкладки листов). Скрипт работает хорошо, но отладка не чистая. Не могли бы вы помочь мне найти лучший синтаксис?

Я получаю ошибку:

"Неожиданная ошибка при получении метода или свойства getBlob для объекта DriveApp.File."

Спасибо

function sendEmails() {

  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 image = DriveApp.getFileById(ss.getRange(i, 6).getValue()).getBlob();
      var message = templateText.replace("{name}",currentname);

      message += "<br/><br/><img src=\"cid:sampleImage\">";


      //Logger.log(currentEmail);

      MailApp.sendEmail({

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

      });

    } //close for loop

  } //close else statement

} //close sendEmails`

1 Ответ

0 голосов
/ 20 марта 2020

Ошибка означает:

No item with the given ID could be found, or you do not have permission to access it.

Или другими словами:

ss.getRange(i, 6).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();
...

Как убедиться, что ячейка, содержащая идентификатор изображения, не пуста?

Реализация if утверждение, проверяющее, является ли ячейка пустой. Если это так, продолжите следующую итерацию l oop:

...
if(ss.getRange(i, 6).isBlank()){
  continue;
}
var image = DriveApp.getFileById(ss.getRange(i, 6).getValue()).getBlob();
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...