GmailApp (скрипт Google Apps) отображает встроенные изображения в виде вложений - PullRequest
0 голосов
/ 31 мая 2019

Доброжелательные друзья из 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('test@email.com', selectedTemplate.getSubject(), '', {
      attachments: attachments,
      htmlBody: emailTemplate,
      inlineImages: inlineImages
    });
};

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

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

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

Опять же, этот dev также имеет такую ​​же проблему.

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

...