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

将Google Docs以带图HTML格式发送至邮件正文失效求助

解决Google Docs导出HTML邮件图片无法正常显示的问题

之前用以下代码可将Google Docs的HTML内容(含格式化文本和图片)正常展示在邮件正文,但近期图片出现显示异常:要么为空,要么直接显示base64编码内容,还会阻塞文档其他内容。

原代码:

function sendGoogleDocAsHTML() {
  var docId = "GOOGLE_DOCS_ID";
  var destinatario = "xxxxxx@gmail.com";
  var oggetto = "SUBJECT";
  
  var url = "https://docs.google.com/document/d/" + docId + "/export?format=html";
  var param = {
    method      : "get",
    headers     : { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
    muteHttpExceptions:true,
  };
  var html = UrlFetchApp.fetch(url, param);

  var raw = Utilities.base64EncodeWebSafe("Subject: " + oggetto + "\r\n" +
                                          "To: " + destinatario + "\r\n" +
                                          "Content-Type: text/html; charset=UTF-8\r\n\r\n" +
                                          html+"\r\n\r\n");
  var message = Gmail.newMessage();
  message.raw = raw;
  var sentMsg = Gmail.Users.Messages.send(message, 'me');
}

异常示例:

<img alt="" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/...

解决方案

问题根源是Google Docs导出的HTML中图片使用base64 Data URI,部分邮件客户端对这种格式支持不佳,且大体积base64会导致渲染异常。我们需要将base64图片转为邮件附件,通过CID引用在正文中显示。

修改后的代码:

function sendGoogleDocAsHTMLWithImages() {
  var docId = "GOOGLE_DOCS_ID";
  var destinatario = "xxxxxx@gmail.com";
  var oggetto = "SUBJECT";
  
  // 导出Google Docs为HTML
  var url = "https://docs.google.com/document/d/" + docId + "/export?format=html";
  var param = {
    method: "get",
    headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
    muteHttpExceptions: true,
  };
  var htmlContent = UrlFetchApp.fetch(url, param).getContentText();
  
  // 提取并处理所有base64图片
  var attachments = [];
  var cidCounter = 1;
  
  // 匹配所有base64图片标签
  htmlContent = htmlContent.replace(/<img[^>]+src="data:image\/([^;]+);base64,([^"]+)"/g, function(match, imageType, base64Data) {
    // 将base64转为Blob
    var blob = Utilities.newBlob(Utilities.base64Decode(base64Data), "image/" + imageType, "image_" + cidCounter + "." + imageType);
    // 生成唯一CID
    var cid = "image" + cidCounter + "@example.com";
    cidCounter++;
    // 添加到附件列表
    attachments.push({blob: blob, cid: cid});
    // 替换src为CID引用
    return match.replace(/src="[^"]+"/, 'src="cid:' + cid + '"');
  });
  
  // 发送邮件:使用GmailApp更简便处理带CID的附件
  GmailApp.sendEmail(
    destinatario,
    oggetto,
    "请使用支持HTML的邮件客户端查看此邮件", // 纯文本降级内容
    {
      htmlBody: htmlContent,
      attachments: attachments.map(att => att.blob),
      inlineImages: attachments.reduce((obj, att) => {
        obj[att.cid] = att.blob;
        return obj;
      }, {})
    }
  );
}

关键改动说明

  • 解析HTML中的base64图片,将其转换为Blob对象作为邮件附件
  • 为每个图片生成唯一的CID(Content-ID),替换原HTML中图片的src为cid:xxx格式
  • 使用GmailApp.sendEmail替代原Gmail API的raw方式,内置支持inline图片的CID引用,避免手动构造raw邮件的编码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:07:12