You need to enable JavaScript to run this app. Google Sheets通过CreateDraft生成Gmail草稿时内嵌图片不显示问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets通过CreateDraft生成Gmail草稿时内嵌图片不显示问题求助

核心问题定位

你现有代码的问题根源是GmailApp.createDraft的参数使用不当:把生成的图片Blob直接作为第四个参数传入时,这个Blob会被识别为普通邮件附件,不会内嵌到邮件正文的内容流中。因此在草稿预览时,图片不会出现在正文区域,只能在附件列表中找到文件。

优化实现方案

要实现正文内嵌截图的效果,需要做三处关键调整:

  • 给生成的表格图片Blob设置专属内容ID(CID)标记,作为正文图片的引用锚点
  • 用HTML格式构造邮件正文,在需要嵌入截图的位置插入<img src="cid:对应CID值">标签
  • 调用草稿创建接口时,通过高级参数传入内嵌图片的映射关系,让Gmail自动将对应CID的图片绑定到正文标签位置,同时不把这张图归类为普通附件

可直接复用的修正代码

function sendit() {
  const range = "A1:H10";
  const [header, ...values] = SpreadsheetApp.getActiveSheet()
    .getRange(range)
    .getDisplayValues();

  // 保留原逻辑:生成表格截图Blob
  const table = Charts.newDataTable();
  header.forEach((colName) => table.addColumn(Charts.ColumnType.STRING, colName));
  values.forEach((row) => table.addRow(row));
  const chartBlob = Charts.newTableChart()
    .setDataTable(table.build())
    .setDimensions(500, 500)
    .setOption("alternatingRowStyle", false)
    .build()
    .getBlob();

  // 生成专属CID标记,绑定图片Blob
  const imageCid = "sheetScreenshot_" + Math.random().toString(36).slice(2);
  chartBlob.setContentType("image/png");
  chartBlob.setName(imageCid);

  // 构造含内嵌图片的HTML正文
  const htmlBody = `
    <p>The time is....</p>
    <p>对应表单截图如下:</p>
    <img src="cid:${imageCid}" />
  `;

  // 配置内嵌图片映射关系
  const inlineImageMap = {};
  inlineImageMap[imageCid] = chartBlob;

  // 创建草稿,参数按接口要求传入
  GmailApp.createDraft(
    "xxxxxx",
    "current time",
    "The time is....",
    {
      htmlBody: htmlBody,
      inlineImages: inlineImageMap
    }
  );
}
关键注意事项
  • 上述逻辑创建的是Gmail草稿而非直接发送的邮件,完全支持打开草稿后手动补充额外信息再发送,匹配你的使用场景
  • 生成图片时可通过setOption追加样式配置,调整表格边框、字体、边距,让截图效果贴近原Excel表单的视觉表现
  • 必须给图片Blob显式声明image/png的内容类型,避免Gmail因文件类型识别错误导致图片加载失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 15:15:06