首页 > 解决方案 > 是否可以使用 Google Apps 脚本在 Html 正文中发送具有不同数量的内联图像的电子邮件?

问题描述

下午好,我目前正在使用下面的代码,它允许我在发送的一系列电子邮件的 html 正文中添加 1 个内联图像或无内联图像,从 GDrive 中获取图像 ID,该图像 ID 位于相同的特定电子表格单元格中柱子。该脚本工作正常,但我想知道,对于要发送的电子邮件循环(电子表格的每一行)是否可以获取可变数量的 ID,并且在具有多个 ID 的单元格中,这些来用逗号分隔?Fi 第一个电子邮件 ID 单元格:Id1、Id2 第二个电子邮件 ID 单元格:Id3、Id4、Id5、Id6 第三个电子邮件 ID 单元格:(空白)第四个电子邮件 ID 单元格:Id7 等等...

谢谢。

这是我的实际工作代码:

function sendEmails(){

  var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
  var lr = ss.getLastRow();

  var quotaLeft = MailApp.getRemainingDailyQuota();
  //Logger.log(quotaLeft);

   if((lr-1) > quotaLeft) {
     Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + 
    (lr-1) + " emails. Emails were not send.");
   } else {

    for (var i = 2;i<=lr;i++){

  var currentEmail = ss.getRange(i, 1).getValue();
  var currentSubject = ss.getRange(i, 2).getValue();
  var templateText = ss.getRange(i, 3).getValue();
  var currentname = ss.getRange(i, 4).getValue();
  var reply = ss.getRange(i, 5).getValue();
  var imageFile = ss.getRange(i, 6).getValue();
  var image = ""
   Logger.log("Cell: " + ss.getRange(i, 6).getA1Notation());
   Logger.log("Image: "+ DriveApp.getFileById(ss.getRange(i, 6).getValue()));

    if(imageFile){
     try{
    image = DriveApp.getFileById(imageFile).getBlob();
      } catch (e) {
   templateText += "<p>Image merge failed: " + e;         
   }
  }

  var message = templateText.replace("{name}",currentname);
  message += "<br/><br/><img src=\"cid:sampleImage\">";

  if(image){
  MailApp.sendEmail({
    to: currentEmail,
    replyTo: reply,
    subject: currentSubject,
    htmlBody: message,
    inlineImages: {sampleImage: image},    
  });

    } else {

  MailApp.sendEmail({
    to: currentEmail,
    replyTo: reply,
    subject: currentSubject,
    htmlBody: message,  
  });
}

    } //close for loop

  } //close else statement

 } //close sendEmails

标签: google-apps-script

解决方案


您可以获取 ID 行并使用循环为内联图像构建 HTML

    function sendMail(){

      var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
      var lr = ss.getLastRow();
      var lc = ss.getLastColumn();

      var quotaLeft = MailApp.getRemainingDailyQuota();

       if((lr-1) > quotaLeft) {
         Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + 
        (lr-1) + " emails. Emails were not send.");
       } else {

        for (var i = 2;i<=lr;i++){

      var currentEmail = ss.getRange(i, 1).getValue();
      var currentSubject = ss.getRange(i, 2).getValue();
      var templateText = ss.getRange(i, 3).getValue();
      var currentname = ss.getRange(i, 4).getValue();
      var reply = ss.getRange(i, 5).getValue();
      var imageID = ss.getRange(i, 6, 1, lc).getValues().toString().split(',').filter(String);
      var image = {};

      var message = templateText.replace("{name}",currentname);


          for (var x = 0; x < imageID.length; x++){
            try{
          image["inlineImage"+x] = DriveApp.getFileById(imageID[x]).getBlob();   
          message += '<br/><img src="cid:' + "inlineImage"+x +'" />';
            } catch (e) {
                templateText += "<p>Image merge failed: " + e;         
           }
           }

      if(image){
      MailApp.sendEmail({
        to: currentEmail,
        replyTo: reply,
        subject: currentSubject,
        htmlBody: message,
        inlineImages: image,    
      });

        } else {

      MailApp.sendEmail({
        to: currentEmail,
        replyTo: reply,
        subject: currentSubject,
        htmlBody: message,  
      });
      }

        } //close for loop

      } //close else statement

     } //close sendEmails```

推荐阅读