Я следовал инструкциям здесь, чтобы мой шаблон подписи Gmail отображал изображение, хранящееся на Google Диске, в качестве логотипа.
Цель состоит в том, чтобы атрибут src тега изображения указывал на изображение и отображал его в строке. В приведенном выше ответе большой двоичный объект изображения извлекается с помощью UrlFetchApp. В моем коде я вызываю метод openById(id) приложения DriveApp, чтобы открыть файл изображения и получить большой двоичный объект.
Однако ни один из подходов не работает. Только когда у меня есть 'src', указывающий непосредственно на URL-адрес изображения, он загружает изображение. Я пытался использовать как base64Encode, так и base64EncodeWebSafe, но подпись показывает только пустой контейнер для изображения.
Что мне здесь не хватает?
HTML-шаблон
<table>
<tbody>
<tr>
<td>
<img src="{{config.imgData}}" alt="my logo">
</td>
<td>
<table>
<tbody>
<tr><td> My name is {{config.name}} </td> </tr>
<tr><td> www.example.com </td> </tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
GS-код
var config = {
name: "Anton",
imgData: ""
}
function updateSignature() {
var imgFileId = "DRIVE FILE ID";
var imgFile = DriveApp.getFileById(imgFileId);
var imgBlob = imgFile.getBlob().getAs("image/png"); //getAs doesn't change anything
//Get content type and bytes
var contentType = imgBlob.getContentType();
var imgBytes = imgBlob.getBytes();
var imgData = contentType + ";base64," + Utilities.base64Encode(imgData);
config.imgData = imgData;
var alias = Gmail.Users.Settings.SendAs.get("me", myEmail);
//Get signature html as a string
var templateString = HtmlService.createHtmlOutputFromFile("signature_template").getContent();
for (var configKey in config) {
if (config.hasOwnProperty(configKey)) {
templateString = templateString.replace("{{config." + configKey + "}}", config[configKey]);
}
}
var finalTemplate = HtmlService.createHtmlOutput(templateString).getContent();
alias.signature = finalTemplate;
Gmail.Users.Settings.SendAs.update(alias, "me", myEmail);
}