如何通过Apps Script在Google Sheets邮件中插入URL内嵌图片
解决方案:将Google表单提交的图片内嵌到邮件中
要实现图片内嵌而非作为附件发送,需修改代码以支持HTML邮件,并通过cid(内容ID)关联图片内容。以下是调整后的完整代码及关键说明:
修改后的完整代码
function Initialize() { try { var triggers = ScriptApp.getProjectTriggers(); for (var i in triggers) { ScriptApp.deleteTrigger(triggers[i]); } ScriptApp.newTrigger("EmailGoogleFormData") .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) .onFormSubmit().create(); } catch (error) { throw new Error("请将此代码添加到Google表格中"); } } function EmailGoogleFormData(e) { if (!e) { throw new Error("请前往运行菜单选择Initialize"); } try { if (MailApp.getRemainingDailyQuota() > 0) { // 替换为目标接收邮箱 var email = "your-target-email@example.com"; // 自定义邮件主题 var subject = "表单提交通知"; var ss = SpreadsheetApp.getActiveSheet(); var cols = ss.getRange(1, 2, 1, ss.getLastColumn()).getValues()[0]; var htmlMessage = "<div style='font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;'>"; var inlineImages = {}; var cidCounter = 1; // 遍历所有表单字段 for (var keys in cols) { var key = cols[keys]; var entry = e.namedValues[key] ? e.namedValues[key].toString() : ""; if ((entry !== "") && (entry.replace(/,/g, "") !== "")) { // 判断是否为Google Drive图片链接(表单上传图片的默认返回格式) if (entry.match(/https:\/\/drive\.google\.com\/.*\/view\?/)) { // 提取Drive文件ID var fileId = entry.match(/d\/(.*?)\//)[1]; var file = DriveApp.getFileById(fileId); // 生成唯一cid标识 var cid = "image" + cidCounter++; inlineImages[cid] = file.getBlob(); // 在HTML中插入内嵌图片 htmlMessage += `<p><strong>${key}:</strong><br><img src="cid:${cid}" style="max-width: 100%; height: auto; border-radius: 4px;"></p>`; } else { // 普通文本字段的格式化输出 htmlMessage += `<p><strong>${key}:</strong> ${entry}</p>`; } } } htmlMessage += "</div>"; // 发送带内嵌图片的HTML邮件 MailApp.sendEmail({ to: email, subject: subject, htmlBody: htmlMessage, inlineImages: inlineImages }); } } catch (error) { Logger.log(error.toString()); } }
关键修改说明
- 切换HTML邮件格式:使用
MailApp.sendEmail的对象参数形式,通过htmlBody构建结构化邮件内容,支持内嵌图片和排版样式,满足直接打印的整洁需求。 - 自动识别图片链接:Google表单上传的图片会返回Drive查看链接,通过正则提取文件ID,再调用
DriveApp.getFileById获取图片的Blob数据。 - 内嵌图片关联:为每个图片分配唯一
cid,在HTML的img标签中用src="cid:xxx"引用,同时将Blob存入inlineImages对象,发送时自动完成cid与图片内容的绑定。 - 基础样式优化:添加了简单的CSS样式,限制邮件宽度、设置字体和图片自适应,提升打印时的整洁度。
注意事项
- 首次运行
Initialize时,需完成脚本的Drive访问授权,按提示操作即可。 - 若表单包含多个图片上传字段,代码会自动逐个处理并内嵌。
- 若表格中是直接插入的图片(而非Drive链接),需额外修改代码提取单元格内的图片URL,可通过
ss.getRange().getImages()方法获取图片对象后再处理。
内容的提问来源于stack exchange,提问作者DarthRevan501st
相关产品推荐
相关产品推荐

