google-apps-script - 如何将 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 相册中检索图片,并希望发送一封包含来自 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()} });
参考:
推荐阅读
- python - 安装 GeoIP pycharm 窗口
- pytorch - 从两个张量(标签、输入)到 DataLoader
- rest - 在 rest::client Perl 中翻译 curl 请求
- python-3.x - 有没有办法在不创建新套接字的情况下处理 CRL 更新
- javascript - Nuxt js中无法识别组合API箭头功能
- sql - 删除 Redshift 中的循环
- java - 如何在java中使用thymleaf html动态加载图像?
- javascript - 为什么 firebase.database 不是函数?
- python - 我的管道没有正确估算值?
- vtk - vtk:如何从世界点获取图像像素索引