You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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样式,限制邮件宽度、设置字体和图片自适应,提升打印时的整洁度。

注意事项

  1. 首次运行Initialize时,需完成脚本的Drive访问授权,按提示操作即可。
  2. 若表单包含多个图片上传字段,代码会自动逐个处理并内嵌。
  3. 若表格中是直接插入的图片(而非Drive链接),需额外修改代码提取单元格内的图片URL,可通过ss.getRange().getImages()方法获取图片对象后再处理。

内容的提问来源于stack exchange,提问作者DarthRevan501st

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:25:30