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?