Google apps script sendMail中inlineImages的Google脚本缓存服务缓存图像

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

我想在谷歌脚本的缓存服务中存储一个图像,然后将这个图像作为内联图像插入HTML邮件中

我试过让它工作,但到目前为止没有成功。记录器中的以下代码错误为“无效参数:附件”。如果我选中它,则会显示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}});

}
开启功能(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')