GmailApp (скрипт Google Apps) отображает встроенные изображения как вложения

Здравствуйте, дружелюбные люди из StackOverflow,

У меня самое трудное время заставить метод GmailApp sendEmail() успешно использовать существующее электронное письмо (например, черновик), которое содержит встроенные изображения в качестве шаблона для новых сообщений.

Похоже, это проблема, так как я обнаружил, что у разработчиков возникла эта проблема здесь и здесь и предлагаемые решения здесь, здесь и здесь. Каждому из этих решений более 4 лет, поэтому, возможно, они устарели. Я не смог использовать ни одно из этих решений, чтобы воспроизвести успех.

В настоящее время я запускаю этот код из своего бэкэнда Google Scripts:

function generateMessageFromTemplate () {
  var selectedTemplate = GmailApp.getMessageById('MESSAGE_ID');

  //////////////////////////////////////////////////////////////////////////////
  // Get inline images and make sure they stay as inline images (via Romain Vialard)
  //////////////////////////////////////////////////////////////////////////////
  var emailTemplate = selectedTemplate.getBody();
  var rawContent = selectedTemplate.getRawContent();
  var attachments = selectedTemplate.getAttachments();

  var regMessageId = new RegExp(selectedTemplate.getId(), "g");
  if (emailTemplate.match(regMessageId) != null) {
    var inlineImages = {};
    var nbrOfImg = emailTemplate.match(regMessageId).length;
    var imgVars = emailTemplate.match(/<img[^>]+>/g);
    var imgToReplace = [];
    if(imgVars != null){
      for (var i = 0; i < imgVars.length; i++) {
        if (imgVars[i].search(regMessageId) != -1) {
          var id = imgVars[i].match(/realattid=([^&]+)&/);
          if (id != null) {
            var temp = rawContent.split(id[1])[1];
            temp = temp.substr(temp.lastIndexOf('Content-Type'));
            var imgTitle = temp.match(/name="([^"]+)"/);
            if (imgTitle != null) imgToReplace.push([imgTitle[1], imgVars[i], id[1]]);
          }
        }
      }
    }
    for (var i = 0; i < imgToReplace.length; i++) {
      for (var j = 0; j < attachments.length; j++) {
        if(attachments[j].getName() == imgToReplace[i][0]) {
          inlineImages[imgToReplace[i][2]] = attachments[j].copyBlob();
          attachments.splice(j, 1);
          var newImg = imgToReplace[i][1].replace(/src="[^\"]+\"/, "src=\"cid:" + imgToReplace[i][2] + "\"");
          emailTemplate = emailTemplate.replace(imgToReplace[i][1], newImg);
        }
      }
    }
  }
  //////////////////////////////////////////////////////////////////////////////

    GmailApp.sendEmail('[email protected]', selectedTemplate.getSubject(), '', {
      attachments: attachments,
      htmlBody: emailTemplate,
      inlineImages: inlineImages
    });
};

Документация Google Scripts по методу sendEmail(): здесь.

Это выходные данные этой функции как есть

Когда я отправляю электронные письма из Apps Script как есть, я получаю электронные письма, которые выглядят следующим образом: скриншот Я повторил тест со старой учетной записью электронной почты yahoo.com и получил те же результаты, что и с учетной записью Gmail.

Опять же, у этого разработчика тоже самое проблема.

Если вы можете помочь, я был бы чрезвычайно благодарен!


person Davis Jones    schedule 31.05.2019    source источник
comment
Ваша проблема заключается в том, чтобы показать изображение как встроенное изображение электронной почты? Или вы хотите отладить свой скрипт до GmailApp.sendEmail()? Если это первое, как насчет того, чтобы протестировать его с помощью простого скрипта? Если последнее, можете ли вы предоставить подробную информацию для воспроизведения вашей ситуации? Если это было не то направление, которое вы хотите, я извиняюсь.   -  person Tanaike    schedule 01.06.2019
comment
Привет @Tanaike. Проблема заключается в том, чтобы показать встроенные изображения. Я протестировал много различных предложенных решений (связанных с моим первоначальным вопросом), но ни одно из них не работает для меня. Мне интересно, изменил ли Google недавно что-то, что нарушает эти решения.   -  person Davis Jones    schedule 03.06.2019
comment
Спасибо за ответ. Я мог бы понять вашу ситуацию. Например, как насчет того, чтобы протестировать его с помощью простого скрипта для вставки встроенных изображений?   -  person Tanaike    schedule 04.06.2019