我正在尝试使用MailApp发送HTML电子邮件。 这是我将从中提取数据的表:
在阅读有关SO的文档和帖子之后,我仍然无法查明为什么发送的电子邮件在变量部分中显示未定义。
如果有人能指出我正确的方向,将不胜感激。
这些是我的代码:
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等有关,但是在调整我的代码后,它们仍然显示为未定义,如图所示。
答案 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>'