【发布时间】:2020-01-18 13:18:49
【问题描述】:
我一直按照说明 here 让我的 Gmail 签名模板将存储在 Google 云端硬盘上的图像显示为徽标。
目标是让图像标签的'src'属性指向图像并内联显示。在上面链接的答案中,图像 blob 是使用 UrlFetchApp 获取的。在我的代码中,我调用 DriveApp 的 openById(id) 方法来打开图像文件并获取 blob。
但是,这两种方法似乎都不起作用。只有当我将“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);
}
【问题讨论】:
标签: google-apps-script gmail web-standards