MailApp的html模板中的未定义变量

时间:2018-11-12 11:19:17

标签: javascript google-apps-script google-sheets

我正在尝试使用MailApp发送HTML电子邮件。 这是我将从中提取数据的表:

enter image description here

在阅读有关SO的文档和帖子之后,我仍然无法查明为什么发送的电子邮件在变量部分中显示未定义。

enter image description here

如果有人能指出我正确的方向,将不胜感激。

这些是我的代码:

sendHtmlEmail.gs

function sendEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var lastRow = ss.getLastRow();

    var quotaLeft = MailApp.getRemainingDailyQuota();
    if((lastRow-1) > quotaLeft){
     Browser.msgBox("You have " + quotaLeft + " email quota left and you're trying to send " + (lastRow-1) + " emails. Emails were not sent.")
    } else {
      for (var row = 2; row <= lastRow; row++){
        var currentEmail = ss.getRange(row, 4).getValue(); 
        var currentContact = ss.getRange(row, 3).getValue();
        var currentNewSize = ss.getRange(row,8).getValue();
        var currentSub = ss.getRange(row, 9).getValue();
        var returnData = [currentContact, currentNewSize, currentSub];
        var html = HtmlService.createTemplateFromFile('htmlTemplate');

        html.data = returnData;
        var template = html.evaluate().getContent();
        var subjectLine = "Important notice";
        MailApp.sendEmail({to: currentEmail, subject: subjectLine, htmlBody: template}); 
       } //close for loop
        Browser.msgBox("You have successfully sent " + (lastRow-1) + " emails.")
     } //close else statement 
}

htmlTemplate.html

<!DOCTYPE html><html><head><base target="_top"></head><body style="text-align: center;font-family: Arial;">
  <div id="center" style="width:300px;border: 2px dotted grey;background:#ececec;margin:25px;margin-left:auto;
margin-right:auto;padding:15px;"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Simple_Alert.svg/600px-Simple_Alert.svg.png"
width="180" style="margin:10px 0px"><br /><div style=" border: 2px dotted grey;background:white;margin-right:auto; margin-left:auto;
padding:10px;"><h2>Alert</h2><h3>Important Notice <br /><br />
+ <?= data.currentContact ?> + '<br />' + <?= data.currentNewSize ?> + '<br />' + <?= data.currentSub ?> + '<br /></h3></div></body></html>'

我知道这与 htmlTemplate data.currentNewSize等有关,但是在调整我的代码后,它们仍然显示为未定义,如图所示。

2 个答案:

答案 0 :(得分:1)

在模板需要对象时,您正在方法中使用数组。

替换

    var returnData = [currentContact, currentNewSize, currentSub];

使用

    var returnData = {currentContact: currentContact, currentNewSize: currentNewSize, currentSub: currentSub}

答案 1 :(得分:0)

问题出在html代码中。当我在sendHtmlEmail.gs中声明数组时,我没有在htmlTemplate.html中正确调用它。

在这一行:

var returnData = [currentContact, currentNewSize, currentSub];

currentContact在位置0,currentNewSize在位置1,依此类推。

在htmlTemplate.html中,我需要替换此行:

+ <?= data.currentContact ?> + '<br />' + <?= data.currentNewSize ?> + '<br />' + <?= data.currentSub ?> + '<br /></h3></div></body></html>'

与此:

+ <?= returnData[0];?> + '<br />' + <?= returnData[1];?> + '<br />' + <?= returnData[2];?> + '<br /></h3></div></body></html>'