10

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

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

MailApp.sendEmail(mailaddress, subject, "" ,
              { htmlBody: bodyNL + bodyFR })
4

2 回答 2

16

文档sendEmail(message)展示了如何将两个徽标作为内联图像添加到电子邮件中。

这是对 Google 示例的改编,它将在您的文本块之前加上它们的语言环境标志。它使用来自维基媒体的图像,这些图像在知识共享下免费许可。

截屏

其工作原理的关键是:

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

    在这里,我们有两个cidsnlFlagfrFlag,每个都与一个fileBlob相关联。

    inlineImages:
    {
      nlFlag: nlFlagBlob,
      frFlag: frFlagBlob
    }
    
  • 可以通过多种方式获取文件 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
                      }
                    });

}
于 2016-06-07T20:17:22.227 回答
0

来自 MailApp 文档:

htmlBody String 如果设置,能够呈现 HTML 的设备将使用它而不是所需的 body 参数;如果您的电子邮件有内联图像,您可以在 HTML 正文中添加可选的 inlineImages 字段

inlineImages Object 一个 JavaScript 对象,包含从图像键 (String) 到图像数据 (BlobSource) 的映射;这假定使用了 htmlBody 参数并包含对这些图像的引用,格式为

因此,您需要将图像添加到 inlineImages 高级参数,并在编写 HTML 消息时引用图像键。

于 2016-03-23T22:17:10.197 回答