Google 为 sendMail 中的 inlineImages 编写 CacheService 缓存图像脚本
Google Script CacheService cache image for inlineImages in sendMail
我想将图像存储在 Google 脚本的缓存服务中,然后将此图像作为内联图像插入到 HTML 邮件中。
我试过让它工作,但到目前为止没有成功。 Logger 中以下代码的错误是 'Invalid argument: attachments'。如果我检查它显示 sendMail() 中的 var 图标是一个 blob:
function onOpen(e){
var icon = DriveApp.getFileById('ID').getBlob().setName('icon');
var cache = CacheService.getDocumentCache().put('icon', icon);
}
function sendMail() {
var icon = CacheService.getDocumentCache().get('icon');
var email = 'test@example.de';
var subject = 'test';
var txt = 'test';
var html = '<img src="cid:icon"/>';
MailApp.sendEmail(email, subject, txt, {htmlBody: html, name : 'test', inlineImages:{icon:icon}});
}
令人惊讶的是,如果我这样做:
function sendMail() {
var icon = DriveApp.getFileById('ID').getBlob().setName('icon');
var email = 'test@example.de';
var subject = 'test';
var txt = 'test';
var html = '<img src="cid:icon"/>';
MailApp.sendEmail(email, subject, txt, {htmlBody: html, name : 'test', inlineImages:{icon:icon}});
}
它工作正常。我的代码有什么问题?
Google Cache Service accepts 只有 string 值,而你正试图将一个 blob 推入其中显然是不同的类型。一旦你把它变成一个合适的字符串 - 它会很好。
为确保我们正确保存它,我们应该使用 base64encode。
尝试替换
var cache = CacheService.getDocumentCache().put('icon', icon);
和
var cache = CacheService.getDocumentCache()
cache.put('icon', Utilities.base64Encode(icon.getBytes()));
分别地,当您取回缓存值时,您将需要从我们的字符串创建一个新的 blob 对象。
首先我们创建空 blob 并读取缓存值:
var iconBlob = Utilities.newBlob("")
var cachedValue = cache.get('icon');
然后你可以像这样使用它:
iconBlob.setBytes(Utilities.base64Decode(cachedValue ))
iconBlob.setName('yourname')
iconBlob.setContentType('image/png')
您可以在 reference 中检查这两种方法。
如果将对象字符串化,您也可以用相同的方式将对象保存在缓存服务中。
我想将图像存储在 Google 脚本的缓存服务中,然后将此图像作为内联图像插入到 HTML 邮件中。
我试过让它工作,但到目前为止没有成功。 Logger 中以下代码的错误是 'Invalid argument: attachments'。如果我检查它显示 sendMail() 中的 var 图标是一个 blob:
function onOpen(e){
var icon = DriveApp.getFileById('ID').getBlob().setName('icon');
var cache = CacheService.getDocumentCache().put('icon', icon);
}
function sendMail() {
var icon = CacheService.getDocumentCache().get('icon');
var email = 'test@example.de';
var subject = 'test';
var txt = 'test';
var html = '<img src="cid:icon"/>';
MailApp.sendEmail(email, subject, txt, {htmlBody: html, name : 'test', inlineImages:{icon:icon}});
}
令人惊讶的是,如果我这样做:
function sendMail() {
var icon = DriveApp.getFileById('ID').getBlob().setName('icon');
var email = 'test@example.de';
var subject = 'test';
var txt = 'test';
var html = '<img src="cid:icon"/>';
MailApp.sendEmail(email, subject, txt, {htmlBody: html, name : 'test', inlineImages:{icon:icon}});
}
它工作正常。我的代码有什么问题?
Google Cache Service accepts 只有 string 值,而你正试图将一个 blob 推入其中显然是不同的类型。一旦你把它变成一个合适的字符串 - 它会很好。
为确保我们正确保存它,我们应该使用 base64encode。
尝试替换
var cache = CacheService.getDocumentCache().put('icon', icon);
和
var cache = CacheService.getDocumentCache()
cache.put('icon', Utilities.base64Encode(icon.getBytes()));
分别地,当您取回缓存值时,您将需要从我们的字符串创建一个新的 blob 对象。
首先我们创建空 blob 并读取缓存值:
var iconBlob = Utilities.newBlob("")
var cachedValue = cache.get('icon');
然后你可以像这样使用它:
iconBlob.setBytes(Utilities.base64Decode(cachedValue ))
iconBlob.setName('yourname')
iconBlob.setContentType('image/png')
您可以在 reference 中检查这两种方法。 如果将对象字符串化,您也可以用相同的方式将对象保存在缓存服务中。