Google 应用脚本:发送电子邮件引用图像
Google App Script: send an email reference an image
例如我使用GoogleApp Script发送邮件,邮件地址,邮件内容来自googlesheet(sheet1),
只是一个代码示例(如果页脚图像在 Google 驱动器中)
function sendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = ss.getActiveCell();
var row = cell.getRow();
var column = cell.getColumn();
var lr = ss.getLastRow();
for (var i = 2;i<=lr;i++){
var assignmentName = sheet.getRange(i, 2).getValue();
var emailAddress = sheet.getRange(i, 1).getValue();
var image1 = DriveApp.getFileById("fileID").getBlob();
var message = "Hi Mr/Mrs,<br /><br />Bellow is your info... <br><img src='cid:Footerimage'> <br>";
GmailApp.sendEmail(emailAddress,"A Test Email", message,
{
htmlBody: message,
inlineImages:
{
Footerimage: image1
}
}
);
}
我的问题是,如果页脚图像来自同一 google sheet(sheet2).
要发送 html 内容,您必须使用如下参数:
GmailApp.sendEmail(emailAddress,"A Test Email", "",{htmlBody:message})
关于图像,您必须找到一种方法来调试它是如何从电子表格中获取的。也许它以 base64 编码的形式出现,视情况而定,我们可以为您提供帮助。
直接使用单元格地址从电子表格中获取图像,例如 getRange("A1").getValue()
使用 IDE,检查是否有像 getValueAsUrl() 这样的方法,可以帮助您。
另一件事,你把 url 的图像而不是直接放到电子表格中怎么样?这样您就可以将该图像作为 html object
发送
我相信你的目标如下。
- 您想从嵌入到单元格中的图像中检索图像数据。并且,您想使用检索到的图像作为页脚发送电子邮件(在这种情况下,您希望将图像用作内联图像)。
问题和解决方法:
遗憾的是,在当前阶段,还没有直接从嵌入到单元格中的图像中检索图像数据的方法。因此,在这种情况下,作为一种解决方法,我想使用我已经回答的方法提出一个示例脚本 here。
关于你的展示脚本,当getValue
循环使用时,进程成本变高。当您使用一张图片时,var image1 = DriveApp.getFileById("fileID").getBlob();
不需要包含在循环中。
用法:
在此解决方法中,为了从嵌入到单元格中的图像中检索图像数据,使用了 Google Apps 脚本库。
1。安装 Google Apps 脚本库。
请安装 Google Apps 脚本库。关于安装库的方法,可以在here.
看到
2。示例脚本。
function myFunction() {
// Retrieve image data from the image embeded into a cell.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const res = DocsServiceApp.openBySpreadsheetId(ss.getId()).getSheetByName("Sheet2").getImages();
const obj = res.find(({ range }) => range.a1Notation == "A1");
if (!obj) throw new Error("Image was not found.");
const imageBlob = obj.image.blob;
// Retrieve email addresses and send emails.
const sheet = ss.getSheetByName("Sheet1");
const values = sheet.getRange("A2:B" + sheet.getLastRow()).getValues();
values.forEach(([emailAddress, assignmentName]) => {
// In your showing script, "assignmentName" is not used.
const sampleBody = "A Test Email";
const message = "Hi Mr/Mrs,<br /><br />Bellow is your info... <br><img src='cid:Footerimage'> <br>";
GmailApp.sendEmail(emailAddress, "A Test Email", message, {
htmlBody: message,
inlineImages: { Footerimage: imageBlob }
});
});
}
当此脚本为 运行 时,从“Sheet2”的单元格“A1”中检索图像数据,并使用从“A”列中检索到的电子邮件地址发送电子邮件“Sheet1”的“”。那时,图像数据使用内联图像作为页脚附加到电子邮件中。
从您的显示脚本中,message
作为正文和 HTML 正文发送。请注意这一点。
注:
- 在此示例脚本中,假设将电子邮件地址放入“Sheet1”的“A”列,将图像数据放入“Sheet2”的单元格“A1”。当您改变这种情况时,脚本可能无法使用。请注意这一点。
参考文献:
- DocsServiceApp
- 相关线程。
- How to access new 'in-cell-image' from google apps script?
例如我使用GoogleApp Script发送邮件,邮件地址,邮件内容来自googlesheet(sheet1),
只是一个代码示例(如果页脚图像在 Google 驱动器中)
function sendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var cell = ss.getActiveCell();
var row = cell.getRow();
var column = cell.getColumn();
var lr = ss.getLastRow();
for (var i = 2;i<=lr;i++){
var assignmentName = sheet.getRange(i, 2).getValue();
var emailAddress = sheet.getRange(i, 1).getValue();
var image1 = DriveApp.getFileById("fileID").getBlob();
var message = "Hi Mr/Mrs,<br /><br />Bellow is your info... <br><img src='cid:Footerimage'> <br>";
GmailApp.sendEmail(emailAddress,"A Test Email", message,
{
htmlBody: message,
inlineImages:
{
Footerimage: image1
}
}
);
}
我的问题是,如果页脚图像来自同一 google sheet(sheet2).
要发送 html 内容,您必须使用如下参数:
GmailApp.sendEmail(emailAddress,"A Test Email", "",{htmlBody:message})
关于图像,您必须找到一种方法来调试它是如何从电子表格中获取的。也许它以 base64 编码的形式出现,视情况而定,我们可以为您提供帮助。
直接使用单元格地址从电子表格中获取图像,例如 getRange("A1").getValue()
使用 IDE,检查是否有像 getValueAsUrl() 这样的方法,可以帮助您。
另一件事,你把 url 的图像而不是直接放到电子表格中怎么样?这样您就可以将该图像作为 html object
发送我相信你的目标如下。
- 您想从嵌入到单元格中的图像中检索图像数据。并且,您想使用检索到的图像作为页脚发送电子邮件(在这种情况下,您希望将图像用作内联图像)。
问题和解决方法:
遗憾的是,在当前阶段,还没有直接从嵌入到单元格中的图像中检索图像数据的方法。因此,在这种情况下,作为一种解决方法,我想使用我已经回答的方法提出一个示例脚本 here。
关于你的展示脚本,当getValue
循环使用时,进程成本变高。当您使用一张图片时,var image1 = DriveApp.getFileById("fileID").getBlob();
不需要包含在循环中。
用法:
在此解决方法中,为了从嵌入到单元格中的图像中检索图像数据,使用了 Google Apps 脚本库。
1。安装 Google Apps 脚本库。
请安装 Google Apps 脚本库。关于安装库的方法,可以在here.
看到2。示例脚本。
function myFunction() {
// Retrieve image data from the image embeded into a cell.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const res = DocsServiceApp.openBySpreadsheetId(ss.getId()).getSheetByName("Sheet2").getImages();
const obj = res.find(({ range }) => range.a1Notation == "A1");
if (!obj) throw new Error("Image was not found.");
const imageBlob = obj.image.blob;
// Retrieve email addresses and send emails.
const sheet = ss.getSheetByName("Sheet1");
const values = sheet.getRange("A2:B" + sheet.getLastRow()).getValues();
values.forEach(([emailAddress, assignmentName]) => {
// In your showing script, "assignmentName" is not used.
const sampleBody = "A Test Email";
const message = "Hi Mr/Mrs,<br /><br />Bellow is your info... <br><img src='cid:Footerimage'> <br>";
GmailApp.sendEmail(emailAddress, "A Test Email", message, {
htmlBody: message,
inlineImages: { Footerimage: imageBlob }
});
});
}
当此脚本为 运行 时,从“Sheet2”的单元格“A1”中检索图像数据,并使用从“A”列中检索到的电子邮件地址发送电子邮件“Sheet1”的“”。那时,图像数据使用内联图像作为页脚附加到电子邮件中。
从您的显示脚本中,
message
作为正文和 HTML 正文发送。请注意这一点。
注:
- 在此示例脚本中,假设将电子邮件地址放入“Sheet1”的“A”列,将图像数据放入“Sheet2”的单元格“A1”。当您改变这种情况时,脚本可能无法使用。请注意这一点。
参考文献:
- DocsServiceApp
- 相关线程。
- How to access new 'in-cell-image' from google apps script?