Google apps script sendMail中inlineImages的Google脚本缓存服务缓存图像
我想在谷歌脚本的缓存服务中存储一个图像,然后将这个图像作为内联图像插入HTML邮件中 我试过让它工作,但到目前为止没有成功。记录器中的以下代码错误为“无效参数:附件”。如果我选中它,则会显示sendMail()中的var图标是一个blob:Google apps script sendMail中inlineImages的Google脚本缓存服务缓存图像,google-apps-script,sendmail,Google Apps Script,Sendmail,我想在谷歌脚本的缓存服务中存储一个图像,然后将这个图像作为内联图像插入HTML邮件中 我试过让它工作,但到目前为止没有成功。记录器中的以下代码错误为“无效参数:附件”。如果我选中它,则会显示sendMail()中的var图标是一个blob: function onOpen(e){ var icon = DriveApp.getFileById('ID').getBlob().setName('icon'); var cache = CacheService.getDocumentCach
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}});
}
开启功能(e){
var icon=DriveApp.getFileById('ID').getBlob().setName('icon');
var cache=CacheService.getDocumentCache().put('icon',icon);
}
函数sendMail(){
var icon=CacheService.getDocumentCache().get('icon');
var电子邮件地址:test@example.de';
var主题=‘测试’;
var txt=‘测试’;
var html='';
sendmail(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}});
}
函数sendMail(){
var icon=DriveApp.getFileById('ID').getBlob().setName('icon');
var电子邮件地址:test@example.de';
var主题=‘测试’;
var txt=‘测试’;
var html='';
sendmail(email,subject,txt,{htmlBody:html,name:'test',inlineImages:{icon:icon}});
}
它很好用。我的代码有什么问题?Google onlystring值,而您试图将一个明显不同类型的blob推入其中。一旦你把它变成一个合适的字符串-它会很好
为了确保正确保存,我们应该使用base64encode
试着替换
var cache = CacheService.getDocumentCache().put('icon', icon);
与
分别地,当您恢复缓存值时,需要从字符串中创建一个新的blob对象
首先,我们创建空blob并读取缓存值:
var iconBlob = Utilities.newBlob("")
var cachedValue = cache.get('icon');
然后你可以像这样使用它:
iconBlob.setBytes(Utilities.base64Decode(cachedValue ))
iconBlob.setName('yourname')
iconBlob.setContentType('image/png')
您可以在中检查这两种方法。
如果对对象进行字符串化,也可以用同样的方法将其保存在缓存服务中 嗨,非常感谢你澄清这一点,它现在起作用了。它还帮助我更深入地了解了缓存在GS中的工作方式。
iconBlob.setBytes(Utilities.base64Decode(cachedValue ))
iconBlob.setName('yourname')
iconBlob.setContentType('image/png')