Google Apps Script邮件inlineImages参数无效错误求助
解决Google Apps Script发送内联表格截图+PDF附件邮件的错误问题
你遇到的Exception: Invalid argument: inlineImages错误,核心原因是inlineImages参数格式不符合Google Apps Script要求,或者HTML正文里的图片引用cid与参数键不匹配。以下是具体修正方案:
关键要求说明
Google Apps Script的MailApp.sendEmail()中,inlineImages参数必须是一个键为自定义cid(内容ID)、值为Blob类型图片数据的对象;同时HTML正文里要通过cid:你的自定义cid格式引用对应图片,二者必须完全一致。
完整修正代码
// 辅助函数:将表格指定区域转为Blob格式图片 function getRangeAsBlob(range) { const ssId = range.getSheet().getParent().getId(); const sheetId = range.getSheet().getSheetId(); // 构造表格区域导出为PNG的URL const exportUrl = `https://docs.google.com/spreadsheets/d/${ssId}/export?format=png&gid=${sheetId}&range=${range.getA1Notation()}`; // 携带OAuth授权令牌获取图片Blob(避免权限问题) const response = UrlFetchApp.fetch(exportUrl, { headers: { Authorization: `Bearer ${ScriptApp.getOAuthToken()}` } }); return response.getBlob().setName('表格指定区域截图.png'); } // 主函数:发送带内联图片+PDF附件的邮件 function sendEmailWithInlineImageAndPDF() { // 1. 配置基础信息 const recipient = '收件人邮箱@example.com'; const subject = '带内联表格截图和PDF附件的邮件'; const plainTextBody = '你的邮件客户端不支持HTML格式,请查看附件'; // 2. 获取表格指定区域的Blob图片 const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('你的工作表名称'); const targetRange = targetSheet.getRange('A1:C5'); // 替换为你需要的区域 const inlineImageBlob = getRangeAsBlob(targetRange); // 3. 构造inlineImages参数(键为cid,值为Blob) const inlineImages = { tableScreenshot: inlineImageBlob // cid命名自定义,比如tableScreenshot }; // 4. 构造HTML正文,引用对应cid的内联图片 const htmlBody = ` <p>您好,以下是表格指定区域的截图:</p> <img src="cid:tableScreenshot" alt="表格区域截图" style="max-width: 100%;"> <p>附件为表格的PDF副本,请查收。</p> `; // 5. 获取PDF附件(这里导出整个表格为PDF,可按需调整) const pdfBlob = SpreadsheetApp.getActiveSpreadsheet().getAs('application/pdf').setName('表格完整副本.pdf'); // 6. 发送邮件 MailApp.sendEmail({ to: recipient, subject: subject, body: plainTextBody, htmlBody: htmlBody, inlineImages: inlineImages, attachments: [pdfBlob] }); }
常见坑点排查
- cid匹配问题:HTML里的
cid:xxx必须和inlineImages对象的键完全一致,大小写敏感,不能有空格或特殊字符 - Blob格式问题:必须确保图片是Blob类型,不能直接传入字符串或其他格式(比如用
getRange().getAs('image/png')无效,因为表格区域不是图片对象,必须通过导出URL获取) - 授权问题:首次运行脚本时,需要授权脚本访问Google Sheets、UrlFetchApp和MailApp,否则会出现权限错误
- 参数结构问题:
inlineImages是对象而非数组,不能用[imageBlob]这种格式传入
内容的提问来源于stack exchange,提问作者Timonek
相关产品推荐
相关产品推荐

