这段代码一直有效,它在邮箱中显示了Google Docs的HTML内容,带有格式化的文本和图像:

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');

}

它已经有几天没有展示这些图片了.它将它们显示为空,或者显示其Base64代码(见下文),从而阻止文档的所有其他内容.

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

我不是唯一遇到这个问题的人.

有什么解决办法吗?谢谢!

推荐答案

而且,我和你也有过同样的情况.在本例中,我使用了一种变通方法.此解决方法的流程如下所示.

  1. 从导出的HTML数据中检索Base64数据.
  2. 将每个Base64数据创建为图像文件.
  3. 从图像文件中检索超链接.
  4. 用检索到的超链接替换HTML数据中的Base64数据.

当这个流反映在您的脚本中时,它将如下所示.

示例脚本1:

在此示例中,图像文件是公开共享的,并使用这些图像的webContent Links.

在测试此脚本之前,请设置为tempFolderId.

function sendGoogleDocAsHTML1() {
  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,
  };

  // --- I modified the below script.
  var tempFolderId = "###"; // Please set the folder ID of the folder for putting the images.
  var folder = DriveApp.getFolderById(tempFolderId);
  var html = UrlFetchApp.fetch(url, param).getContentText();
  [...html.matchAll(/src\="(data:image.*?)"/g)].forEach(([, e], i) => {
    var [mimeType, data] = e.split(",");
    var temp = folder.createFile(Utilities.newBlob(Utilities.base64Decode(data), mimeType, `image${i + 1}`));
    temp.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    var url = `https://drive.google.com/uc?export=download&id=${temp.getId()}`;
    html = html.replace(e, url);
  });
  // ---

  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');
}

示例脚本2:

在此示例中,使用了图像的缩略图链接.

在测试此脚本之前,请设置为tempFolderId. And also, please enable Drive API at Advanced Google services. In this case, the image files are not required to be publicly shared.

function sendGoogleDocAsHTML2() {
  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,
  };

  // --- I modified the below script.
  var tempFolderId = "###"; // Please set the folder ID of the folder for putting the images.
  var folder = DriveApp.getFolderById(tempFolderId);
  var html = UrlFetchApp.fetch(url, param).getContentText();
  [...html.matchAll(/src\="(data:image.*?)"/g)].forEach(([, e], i) => {
    var [mimeType, data] = e.split(",");
    var temp = folder.createFile(Utilities.newBlob(Utilities.base64Decode(data), mimeType, `image${i + 1}`));
    var url = Drive.Files.get(temp.getId()).thumbnailLink.replace("=s220", "=s1000");
    html = html.replace(e, url);
  });
  // ---

  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');
}

注:

  • 在此解决方法中,只有图像会替换为超链接.不幸的是,该图纸不能使用.请注意这一点.

Html相关问答推荐

如何将grid—template—column应用于元素中的子元素

选中/取消选中带有_hyperscript的多个复选框

使用HTML进行DAX测量

为什么根捕获上的`min-height`溢出,而`height`没有?

如何用css在右侧创建多个半圆

如何使用css横向显示英文和中日韩文字?

水平行中按钮的垂直偏移

仅 Select 悬停的级别,而不 Select 其父级或子级

来自元标记的响应文本

我的 *ngFor 中的 array.reverse() 在生产中不起作用

Web 组件 #shadow-root css 泄漏到文档

下划线在 Bootstrap 5 导航链接下无法正常工作

为 HTML5 文本字段设置最后六位正则表达式模式

当作为常规图片输入时,Cloudfront分布式图像可显示,但作为背景图像不显示

在 iPhone 上分隔 HTML 邮箱输入中的多个邮箱条目

如何使我的设计适合与我的框架尺寸不同的视口?

子 div 在父 div 中溢出

无法使用 flexbox 裁剪图像

让 Iframe 覆盖整个页面

打开 Bootstrap 模式时无法获得模糊的背景