我正在将Google脚本用于动态sendMail功能。突出显示一行后,相关数据点将被填充到电子邮件中并继续发送。发送的这封电子邮件是非常基本的(仅纯文本),但是我想使用HTML对其进行修饰以使其看起来更专业。我在其中添加了HTML.index文件和相应的HTML代码,我从.gs(javascript)文件引用了HTML文件,并且可以正常工作并发送电子邮件,但是,我想知道如何合并var(变量)从.gs(javascript)文件直接导入HTML.index文件。变量是动态的,并且已经通过在.gs(javascript)文件中进行编码来确定。我要找的实际上是将这些动态值带入发出的外观更好的html电子邮件中。
我搜索了互联网并发现可以使用
<?!= include('JavaScript'); ?>
HTML.index文件中的,其中JavaScript是.gs(javascript)文件的名称。但是,我相信这包含了ENTIRE文件,而我只想输入所需的相应var(变量)。
JavaScript代码(.gs)
function Test11() { //Testing script emails with html
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ActiveRow = ss.getActiveRange().getRow() - 1;
var dataRange = ss.getRange("A:AD");
var data = dataRange.getDisplayValues();
var rowData = data[ActiveRow];
var emailAddress = rowData[29]; //email OK
var ApptStatus = rowData[6]; //Appt Status OK
var message2 = rowData[9]; //Name
var message3 = rowData[10]; //Language
var message4 = rowData[11]; //Date
var message5 = rowData[12]; //Time
var message6 = rowData[13]; //Type
var message7 = rowData[14]; //Notes
var message8 = rowData[15]; //Fac Name
var message9 = rowData[16]; //Address
var message10 = rowData[17]; //City
var FacState = rowData[21]; //State
var message11 = rowData[18]; //Zip
var message12 = rowData[19]; //Phone
var message13 = rowData[20]; //Service
var ccmsg = {cc: 'email@domain.com'}
var htmlOutput = HtmlService.createHtmlOutputFromFile('index') //htmlOutput
connects index.html file, getContent shows content but not in html
var message = htmlOutput.getContent() // WORKS
var Amessage = INSERT MESSAGE HERE //original plain text
var subject = 'TEST ONLY - please IGNORE: ' + message2 + ' (' + message4 + '
at ' + message5 + ' in ' + message10 + ')';
MailApp.sendEmail('email@domain.com', subject, message,
{'htmlBody':message});
}
index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
HTML CODING (not included as its 700+ lines)
Just a sample of my ideal outcome
Confirmation of your appointment at 'message4' (DATE FROM GS
file) at 'message5' (TIME FROM GS FILE), etc.
MORE HTML CODING
</head>
<body>
</body>
</html>
答案 0 :(得分:0)
最简单的操作是在HTML中添加占位符,然后在发送电子邮件之前替换它们。
因此,您的index.html文件需要使用占位符{message4}
和{message5}
的以下内容。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Confirmation of your appointment at {message4} at {message5}. Again, {message4} at {message5}.
</body>
</html>
在.gs文件中,将HTML转换为字符串,替换值,然后发送电子邮件。重要的是,这是有效的,因为htmlBody
高级参数expects a string。
function sendConfirmationEmail() {
var message4 = "Date";
var message5 = "Time";
var htmlTemplate = HtmlService.createHtmlOutputFromFile("index") // Generate the HTML
.getContent(); // Convert it to a string
var message = htmlTemplate.replace(/{message4}/g, message4) // Use regex with global flag to replace all instances
.replace(/{message5}/g, message5); // You can chain the .replace() methods
MailApp.sendEmail("email@example.com", "subject", plainTextBody, {"htmlBody": message});
}
如果您进行了Logger.log(message)
,则输出为:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Confirmation of your appointment at Date at Time. Again, Date at Time.
</body>
</html>
我强烈建议您使用更具描述性的变量名。例如,将其命名为message4
或date
而不是appointmentDate
。