GmailApp(Google Apps脚本)将嵌入式图像显示为附件

时间:2019-05-31 19:39:11

标签: google-apps-script gmail gmail-addons google-apps-script-addon

您好,友好的StackOverflow伙伴,

我要让最困难的时间来让GmailApp sendEmail()方法成功地使用现有的电子邮件(例如草稿),该电子邮件包含内嵌的图像作为新邮件的模板。

这似乎是个问题,因为我发现开发人员遇到了这个问题herehere并提出了解决方案herehere和{{3} }。这些解决方案均已使用4年以上,因此它们可能已过时。我一直无法使用任何这些解决方案来复制成功。

当前,我正在从我的Google脚本后端运行此代码:

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
    });
};

sendEmail()方法上的Google脚本文档为here

这是此函数的原样

按原样从Apps脚本发送电子邮件时,会收到如下电子邮件: here 我已经使用旧的yahoo.com电子邮件帐户复制了该测试,并且结果与Gmail帐户完全相同。

同样,screenshot也有同样的问题。

如果您能提供帮助,我将非常感谢!

0 个答案:

没有答案
相关问题