Google apps script HtmlService.CreateHtmlOutFromFile邮件合并-无法更改占位符
我在Google脚本代码编辑器中构建了一个HTML文件。 在HTML中,我包含了占位符,比如{{NAME}。 我的目标是用Google工作表中的数据替换这些占位符。 嗯……它不起作用:) 接收电子邮件时,正文中仅包含HtmlOutput。 代码如下。我错过了什么Google apps script HtmlService.CreateHtmlOutFromFile邮件合并-无法更改占位符,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在Google脚本代码编辑器中构建了一个HTML文件。 在HTML中,我包含了占位符,比如{{NAME}。 我的目标是用Google工作表中的数据替换这些占位符。 嗯……它不起作用:) 接收电子邮件时,正文中仅包含HtmlOutput。 代码如下。我错过了什么 var emailBody = HtmlService.createHtmlOutputFromFile('client_intro_email'); emailBody = emailBody.replace({{NAME}}, cl
var emailBody = HtmlService.createHtmlOutputFromFile('client_intro_email');
emailBody = emailBody.replace({{NAME}}, clientname);
GmailApp.sendEmail(clientemail, 'subject', '',
{htmlBody: emailBody.getContent(),
}
答复:
您可以使用模板化HTML从脚本中动态插入HTML内容
更多信息:
从Scriptlet的文档中:
应用程序脚本模板可以包含三个特殊标记,称为scriptlet。在scriptlet中,您可以编写在普通应用程序脚本文件中工作的任何代码:scriptlet可以调用在其他代码文件中定义的函数、引用全局变量或使用任何应用程序脚本API。您甚至可以在Scriptlet中定义函数和变量,但需要注意的是,它们不能由代码文件或其他模板中定义的函数调用
因此,您可以创建一个HTML模板文件(从应用程序脚本UI中的文件>新建>HTML文件
菜单项),并将其设置为准备接收来自应用程序脚本功能处理的任何数据
设置HTML:
作为一个简单的示例,您可以创建一个名为emailTemplate.HTML
的HTML文件,其中包含以下数据:
你好,你的电子邮件地址是。
然后,在code.gs
文件中,您可以在评估HTML模板之前将所需数据直接加载到HTML模板中:
var htmlTemplate=HtmlService.createTemplateFromFile('emailTemplate.html');
var clientname=spreadsheet.getRange('C2').getValue();
var clientemail=spreadsheet.getRange('P2').getValue();
htmlTemplate.email=客户邮件;
htmlTemplate.name=客户端名称;
var emailBody=htmlTemplate.evaluate();
GmailApp.sendmail(客户邮件,'主题','',
{
htmlBody:emailBody.getContent(),
});
这减轻了使用emailBody.replace({{NAME},clientname)进行替换的任何需要代码>因为模板直接加载了在应用程序脚本中设置的变量
一个叫约翰·多伊的人,电子邮件地址是约翰·多伊。doe@example.com
,上面的示例将发送一封电子邮件,显示为:
你好,John Doe,你的电子邮件地址是John。doe@example.com.
我希望这对你有帮助
参考资料:
文件>新建>HTML文件
菜单项),并将其设置为准备接收来自应用程序脚本功能处理的任何数据
设置HTML:
作为一个简单的示例,您可以创建一个名为emailTemplate.HTML
的HTML文件,其中包含以下数据:
你好,你的电子邮件地址是。
然后,在code.gs
文件中,您可以在评估HTML模板之前将所需数据直接加载到HTML模板中:
var htmlTemplate=HtmlService.createTemplateFromFile('emailTemplate.html');
var clientname=spreadsheet.getRange('C2').getValue();
var clientemail=spreadsheet.getRange('P2').getValue();
htmlTemplate.email=客户邮件;
htmlTemplate.name=客户端名称;
var emailBody=htmlTemplate.evaluate();
GmailApp.sendmail(客户邮件,'主题','',
{
htmlBody:emailBody.getContent(),
});
这减轻了使用emailBody.replace({{NAME},clientname)进行替换的任何需要代码>因为模板直接加载了在应用程序脚本中设置的变量
一个叫约翰·多伊的人,电子邮件地址是约翰·多伊。doe@example.com
,上面的示例将发送一封电子邮件,显示为:
你好,John Doe,你的电子邮件地址是John。doe@example.com.
我希望这对你有帮助
参考资料:
电子表格?是的。它已定义,并且在“clientname2”的括号内显示了正确的单元格内容).htmlTemplate.name=clientname;什么是clientname2
?哇,谢谢你的超级详细的回答。这非常有用!很遗憾,我现在得到以下错误=TypeError:无法将未定义的属性“clientname”设置为“clientname2”。我试图添加.toString(),但没有解决它:(哪一行是I
Hi {{NAME}},
var clientname = spreadsheet.getRange('C2').getValue();
var clientemail = spreadsheet.getRange('P2').getValue();