如何基于base64图片URL为Google Apps Script MailApp创建inlineImage blob
问题原因
你代码的核心错误是方法参数类型不匹配:Utilities.base64Decode() 方法执行后返回的是二进制字节数组,而你调用的setDataFromString()方法仅支持接收字符串类型参数,二者类型不匹配直接导致脚本运行报错。
修复方案
直接在Utilities.newBlob()的入参中传入解码后的字节数组,同时指定内容类型和文件名即可,代码示例:
// 移除data URI头部,保留纯base64编码的图片数据 const base64Data = imgTxt.slice('data:image/jpeg;base64,'.length); // 解码后直接生成Blob const userImgBlob = Utilities.newBlob(Utilities.base64Decode(base64Data), 'image/jpeg', 'userImgBlob');
如果需要适配不同格式的图片data URI,可以用正则通用移除头部:
const base64Data = imgTxt.replace(/^data:image\/[^;]+;base64,/, ''); const userImgBlob = Utilities.newBlob(Utilities.base64Decode(base64Data), 'image/jpeg', 'userImgBlob');
邮件插入使用示例
生成Blob后,在邮件发送参数中指定对应inlineImages映射即可正常插入内联图片:
MailApp.sendEmail({ to: "办事员邮箱地址", subject: "非预设名单用户签到提醒", htmlBody: "签到人照片:<br><img src=\"cid:signInImg\">", inlineImages: { signInImg: userImgBlob } });
内容的提问来源于stack exchange,提问作者Jeff White
相关产品推荐
相关产品推荐

