Google apps script HtmlService.CreateHtmlOutFromFile邮件合并-无法更改占位符

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

我在Google脚本代码编辑器中构建了一个HTML文件。 在HTML中,我包含了占位符,比如{{NAME}。 我的目标是用Google工作表中的数据替换这些占位符。 嗯……它不起作用:) 接收电子邮件时,正文中仅包含HtmlOutput。 代码如下。我错过了什么

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内容

更多信息: 从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.
我希望这对你有帮助

参考资料:

您应该阅读scriplets和模板html。谢谢。是的,我已经读过那篇文章了。对我来说,相关的部分似乎是。但我不明白如何让它发生。我的想法是获取一组变量(请参阅更新的问题),然后将它们放入HTML中,然后将其作为个性化电子邮件发送给新客户。您应该阅读scriplets和模板化HTML。谢谢。是的,我已经读过那篇文章了。对我来说,相关的部分似乎是。但我不明白如何让它发生。我的想法是获得一组变量(见更新的问题),然后将它们放入HTML中,然后将其作为个性化电子邮件发送给新客户。哇,谢谢你的超详细回答。这很有帮助!遗憾的是,我现在得到以下错误=TypeError:无法将未定义的属性“clientname”设置为“clientname2”。我试图添加.toString(),但它没有解决问题:(哪一行出现此错误?是否正确定义了
电子表格
?是的。它已定义,并且在“clientname2”的括号内显示了正确的单元格内容).htmlTemplate.name=clientname;什么是
clientname2
?哇,谢谢你的超级详细的回答。这非常有用!很遗憾,我现在得到以下错误=TypeError:无法将未定义的属性“clientname”设置为“clientname2”。我试图添加.toString(),但没有解决它:(哪一行是I Hi {{NAME}},

  var clientname = spreadsheet.getRange('C2').getValue();
  var clientemail = spreadsheet.getRange('P2').getValue();