Как включить встроенные изображения в электронную почту с помощью 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-сообщения.