首页 > 解决方案 > 将对象添加到 inlineImages sendEmail 参数

问题描述

我正在使用以下内容遍历工作表名称“图表”上的所有图表,并将它们作为内联图像附加。

在 htmlBody 中,我将需要的每个图表引用为字符串 ChartXString。

  var Chart1Sheet = SpreadsheetApp.getActive().getSheetByName('Charts');
  var charts1 = Chart1Sheet.getCharts();
  var chartBlobs1=new Array(charts1.length); 
  var emailImages1={};
  for(var i=0;i<charts1.length;i++){
    var builder = charts1[i].modify();
    builder.setOption('vAxis.format', '#');
    var newchart = builder.build();
    chartBlobs1[i]= newchart.getAs('image/png');
    chart1String = "<p align='center'><img src='cid:chart"+0+"'></p>";
    chart2String = "<p align='center'><img src='cid:chart"+1+"'></p>";
    chart3String = "<p align='center'><img src='cid:chart"+2+"'></p>";
    chart4String = "<p align='center'><img src='cid:chart"+3+"'></p>";
    emailImages1["chart"+i]= chartBlobs1[i];
  }


  myHTML = myHTML + myHTML2 + myHTML3 + myHTML4 + myHTML5 + chart1String + chart2String + chart3String + chart4String + myHTML6;
  recipient = 'email@address';
  subject = 'My subject text';
  body = 0;


  MailApp.sendEmail(recipient, subject, body, {htmlBody: myHTML, inlineImages:emailImages1});

这工作得很好,但是我想添加一个图像,如文档中的示例

  var youtubeLogoUrl =
        "https://developers.google.com/youtube/images/YouTube_logo_standard_white.png";
  var youtubeLogoBlob = UrlFetchApp
                          .fetch(youtubeLogoUrl)
                          .getBlob()
                          .setName("youtubeLogoBlob");
  MailApp.sendEmail({
    to: "recipient@example.com",
    subject: "Logos",
    htmlBody: "inline YouTube Logo <img src='cid:youtubeLogo'>",
    inlineImages:
      {
        youtubeLogo: youtubeLogoBlob
      }
  });

我认为问题在于不了解如何添加对象。这是我到目前为止所尝试的:

  var youtubeLogoUrl =
        "https://developers.google.com/youtube/images/YouTube_logo_standard_white.png";
  var youtubeLogoBlob = UrlFetchApp
                          .fetch(youtubeLogoUrl)
                          .getBlob()
                          .setName("youtubeLogoBlob");
LogoStr = "<img src='cid:youtubeLogo'>";

  var Chart1Sheet = SpreadsheetApp.getActive().getSheetByName('Charts');
      ................
    chart4String = "<p align='center'><img src='cid:chart"+3+"'></p>";
    emailImages1["chart"+i]= chartBlobs1[i] + youtubeLogoBlob;
  }


  myHTML = LogoStr + myHTML + myHTML2 + myHTML3 + myHTML4 + myHTML5 + chart1String + chart2String + chart3String + chart4String + myHTML6;
  recipient = 'email@address';
  subject = 'My subject text';
  body = 0;


  MailApp.sendEmail(recipient, subject, body, {htmlBody: myHTML, inlineImages:emailImages1});

我也尝试过:

  MailApp.sendEmail(recipient, subject, body, {htmlBody: myHTML, inlineImages:emailImages1,youtubeLogoBlob});

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


  • 您想作为 inlineImages包含youtubeLogoBlob在内。emailImages1

如果我的理解是正确的,那么这个修改呢?请修改您问题中的第三个脚本,如下所示。

从:

  emailImages1["chart"+i]= chartBlobs1[i] + youtubeLogoBlob;
}
myHTML = LogoStr + myHTML + myHTML2 + myHTML3 + myHTML4 + myHTML5 + chart1String + chart2String + chart3String + chart4String + myHTML6;
recipient = 'email@address';
subject = 'My subject text';
body = 0;
MailApp.sendEmail(recipient, subject, body, {htmlBody: myHTML, inlineImages:emailImages1});

到:

  emailImages1["chart"+i]= chartBlobs1[i]; // Modified
}
emailImages1["youtubeLogo"] = youtubeLogoBlob; // Added
myHTML = myHTML + myHTML2 + myHTML3 + myHTML4 + myHTML5 + chart1String + chart2String + chart3String + chart4String + myHTML6;
recipient = 'email@address';
subject = 'My subject text';
body = 0;
MailApp.sendEmail(recipient, subject, body, {htmlBody: myHTML, inlineImages:emailImages1}); // Modified

笔记:

  • 在您的脚本中,您显示的脚本中未声明的几个变量,请注意这一点。

如果我误解了你的问题,我很抱歉。


推荐阅读