首页 > 解决方案 > 如何将 Google 照片中的一张图片添加到 HTML 模板以发送电子邮件?

问题描述

我需要将 Google 照片中的照片用于 HTML 模板。

我在这里阅读了一些答案。在所有答案中都在谈论使用图片的 URL,但对我来说主要问题是从 Google Photos 获取图片的 URL

这是我的代码:

function sendToGroup() {
  var htmlBody = HtmlService.createHtmlOutputFromFile('emailBody').getContent();
  var mSubject="Lorem ipsum";

  var mName='Me | me.com';
  GmailApp.sendEmail(
     'one-group@me.com', 
      mSubject, 
     'Lorem ipsum',
     {
       htmlBody: htmlBody,
       name: mName
     }
  ); 
  Logger.log('EMail OK');
}

实际上,在我的 HTML 模板中,我使用了来自 Flickr 的图像。我可以轻松获取这些图像的 URL 并将其毫无问题地用于 HTML,例如,这很好用:

<div class="fluid-img" style="font-size:0pt; line-height:0pt; text-align:left"><a href="#" target="_blank"><img src="https://live.staticflickr.com/7916/45689248745_7268fc026d_z.jpg" border="0" width="650" alt="" /></a></div>

最近我在 Google Workspace 中创建了一个帐户,我想将我的所有照片从 Flickr 迁移到 Google Photos。

有一种方法可以使用 Google 相册发送 HTML 电子邮件吗?我说的是作为电子邮件内容的一部分发送图像,而不是作为附件发送。

标签: google-apps-scriptgoogle-workspacegoogle-photos

解决方案


我相信你的目标如下。

  • 您想从 Google 相册中检索图片,并希望发送一封包含来自 Google 相册的图片的电子邮件。
  • 您想使用 Google Apps 脚本来实现这一点。

修改点:

  • 不幸的是,在您的脚本中,图像不是从 Google 照片中检索到的。
  • 在您的情况下,我认为需要从 Google 照片中检索图像。
    • 为此,需要将 Cloud Platform Project 链接到 Google Apps Script Project。关于这一点,你可以看到这个线程。在此示例脚本中,未使用该库。所以不需要安装库。
  • 当您想使用 Google 照片的图像时,您可以使用baseUrl项目。但是,这是临时 URL。所以在这种情况下,我想提出两种模式。
  • 在此脚本中,使用了以下范围。
    • https://www.googleapis.com/auth/photoslibrary
    • https://www.googleapis.com/auth/script.external_request
    • https://www.googleapis.com/auth/script.send_mail

示例脚本:

在使用此脚本之前,请将 Cloud Platform Project 链接到 Google Apps Script Project 并在 API 控制台中启用 Photos Library API,并将范围设置为清单文件 ( appsscript.json)。

function myFunction() {
  const searchFilename = "###"; // Please set the filename for searching the image from Google Photos.

  const headers = {"Authorization": "Bearer " + ScriptApp.getOAuthToken()};
  let pageToken = "";
  const mediaItems = [];
  do {
    const url = "https://photoslibrary.googleapis.com/v1/mediaItems?pageSize=100&pageToken=" + pageToken;
    const res = UrlFetchApp.fetch(url, {headers: headers});
    const obj = JSON.parse(res.getContentText());
    Array.prototype.push.apply(mediaItems, obj.mediaItems);
    pageToken = obj.nextPageToken || "";
  } while (pageToken);
  const images = mediaItems.filter(({filename}) => filename == searchFilename);
  if (images.length > 0) {
    MailApp.sendEmail({
      to: "###email address ###",
      subject: "sample mail",
      htmlBody: `<div class="fluid-img" style="font-size:0pt; line-height:0pt; text-align:left"><a href="#" target="_blank"><img src="${images[0].baseUrl}" border="0" width="650" alt="" /></a></div>`,
    });
  }
}
  • 使用“mediaItems.list”方法检索 Google Photos 的图像。为了搜索图像,作为示例,使用文件名。因为在您的问题中,我找不到从 Google 照片中搜索图像的方法。所以请根据您的实际情况进行修改。

  • 上面的脚本使用baseUrl. 但是,这个 URL 是一个临时 URL。因此,与其他模式一样,我建议如下使用图像 blob。使用时请MailApp.sendEmail()进行如下修改。

      MailApp.sendEmail({
        to: "###email address ###",
        subject: "sample mail",
        htmlBody: "<img src='cid:sample'>",
        inlineImages: {sample: UrlFetchApp.fetch(images[0].baseUrl).getBlob()}
      });
    

参考:


推荐阅读