Как включить встроенные изображения в электронную почту с помощью MailApp

У меня есть простой MailApp для отправки текста в формате HTML. Небольшой вопрос, который у меня возникает: как вставить встроенные изображения в этот текст? Например, я хочу добавить голландский флаг для голландского текста и французский флаг для французского контента.

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

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

2 ответа

Решение

Документация для sendEmail(message) показывает, как добавить два логотипа в электронное письмо в виде встроенных изображений.

Вот адаптация из примера Google, которая добавит к вашим текстовым блокам их флаги локали. Он использует изображения из Викимедиа, которые свободно распространяются по лицензии Creative Commons.

Скриншот

Ключи к тому, как это работает:

  • HTML <img> использование тегов в теле письма src='cid:[name]' для ссылки на прикрепленные изображения. Это универсальные локаторы ресурсов Content-ID, которые ссылаются на части составных сообщений электронной почты.
  • Вы можете использовать встроенный style на <img> теги, чтобы указать почтовому клиенту, как их отображать. Например, мы масштабировали прикрепленные изображения. (Примечание: было бы менее затратно использовать пользовательские изображения, которые имеют точный необходимый размер.)
  • Когда электронное письмо закодировано для отправки, каждое прикрепленное изображение будет иметь свою собственную часть, помеченную cid вы предоставили в inlineImages объект. Этот объект является частью объекта расширенных параметров для sendMail() метод.

    Здесь у нас есть два cid s, nlFlag а также frFlag каждый из которых связан с файлом Blob,

    inlineImages:
    {
      nlFlag: nlFlagBlob,
      frFlag: frFlagBlob
    }
    
  • Файловые капли могут быть получены разными способами; здесь мы использовали UrlFetchApp.fetch() чтобы получить двоичные изображения из WikiMedia, затем преобразовать их в BLOB-объекты и установить имя BLOB-объекта для прикрепления.

Код:

/**
 * Example of sending an HTML email message with inline images.
 * From: http://stackru.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
                      }
                    });

}

Из документов MailApp:

Если задана строка htmlBody, устройства, способные отображать HTML, будут использовать ее вместо требуемого аргумента body; Вы можете добавить дополнительное поле inlineImages в теле HTML, если у вас есть встроенные изображения для вашей электронной почты

inlineImages Object Объект JavaScript, содержащий сопоставление ключа изображения (String) с данными изображения (BlobSource); это предполагает использование параметра htmlBody и содержит ссылки на эти изображения в формате

Поэтому вам нужно добавить свои изображения в расширенный параметр inlineImages и ссылаться на ключ изображения при составлении HTML-сообщения.

Другие вопросы по тегам