如何使用MailApp在电子邮件中包含内嵌图像

Ari*_*orp 7 email gmail inline-images google-apps-script

我有一个简单的MailApp来发送HTML格式的文本.我遇到的一个小问题是:如何在该文本中插入内嵌图像?例如,我想为荷兰文本添加荷兰语标志,为法语内容添加法国国旗.

我假设只使用HTML代码就可以完成这项工作.但是,唉,没有这样的运气.这只是我需要的一个小图像,内容下面没有大图像.我怎么能做到这一点?

MailApp.sendEmail(mailaddress, subject, "" ,
              { htmlBody: bodyNL + bodyFR })
Run Code Online (Sandbox Code Playgroud)

Mog*_*dad 8

该文档sendEmail(message)显示如何将两个徽标作为内嵌图像添加到电子邮件中.

以下是Google示例的改编版,它将使用区域设置标记添加文本块.它使用来自维基媒体的图像,这些图像是在知识共享下免费许可的.

截图

这是如何工作的关键:

  • <img>电子邮件正文中的HTML 标记src='cid:[name]'用于引用附加的图像.这些是Content-ID Universal Resource Locators,它引用了多部分电子邮件的部分内容.
  • 您可以style<img>标记上使用内联来告诉邮件客户端如何显示它们.例如,我们已经缩放了附加的图像.(注意:使用所需大小的自定义图像会更少浪费.)
  • 当电子邮件编码为发送时,每个附加的图像将在其自己的部分,标记为cid您在inlineImages对象中提供的.此对象是方法的高级参数对象的一部分sendMail().

    在这里,我们有两个cids,nlFlag并且frFlag每个都与一个文件Blob相关联.

    inlineImages:
    {
      nlFlag: nlFlagBlob,
      frFlag: frFlagBlob
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 文件blob可以通过多种方式获得; 在这里,我们习惯UrlFetchApp.fetch()从WikiMedia获取二进制图像,然后将它们转换为blob并设置blob的名称以便附加.

码:

/**
 * Example of sending an HTML email message with inline images.
 * From: http://stackoverflow.com/a/37688529/1677912
 */
function sendInlineImages() {
  var mailaddress = Session.getActiveUser().getEmail();
  var subject = "test inline images";
  var bodyNL = "This is <B>DUTCH</B> text.";
  var bodyFR = "This is <B>FRENCH</B> text.";

  // Image URLs, under CC license
  var nlFlagUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Flag_of_the_Netherlands.png/320px-Flag_of_the_Netherlands.png";
  var frFlagUrl = "https://upload.wikimedia.org/wikipedia/en/thumb/c/c3/Flag_of_France.svg/320px-Flag_of_France.svg.png";

  // Fetch images as blobs, set names for attachments
  var nlFlagBlob = UrlFetchApp
                            .fetch(nlFlagUrl)
                            .getBlob()
                            .setName("nlFlagBlob");
  var frFlagBlob = UrlFetchApp
                            .fetch(frFlagUrl)
                            .getBlob()
                            .setName("frFlagBlob");

  // Prepend embeded image tags for email
  bodyNL = "<img src='cid:nlFlag' style='width:24px; height:16px;'/>" + bodyNL;
  bodyFR = "<img src='cid:frFlag' style='width:24px; height:16px;'/>" + bodyFR;

  // Send message with inlineImages object, matching embedded tags.
  MailApp.sendEmail(mailaddress, subject, "",
                    { htmlBody: bodyNL + "<BR/><BR/>" + bodyFR,
                      inlineImages:
                      {
                        nlFlag: nlFlagBlob,
                        frFlag: frFlagBlob
                      }
                    });

}
Run Code Online (Sandbox Code Playgroud)

  • 您好,我尝试过此操作,但对我来说,图像是作为附件而不是内联图像发送的。知道为什么吗?谢谢! (4认同)