Google Apps Script HTML变量换行无法渲染的问题求助
解决Google Apps Script HTML模板中变量HTML代码不渲染的问题
问题原因
核心问题是Google Apps Script的HTML模板默认转义机制:<?= ?>语法会自动将变量中的HTML标签转义为实体字符(比如<br>变成<br>),导致HTML代码无法被渲染,只能以纯文本形式显示。另外你的代码还存在一个隐性错误:没有将模板对象赋值给emailHTML变量,这会导致后续设置属性失败。
解决方案
- 使用非转义输出语法:将模板中输出
message变量的<?= ?>替换为<?!= ?>,该语法会直接输出原始HTML内容,不进行转义。 - 修正模板变量赋值:确保将
HtmlService.createTemplateFromFile的返回值赋值给emailHTML变量。 - 直接使用原生HTML标签:传入
message变量时,不需要将<br>转义为<br>,直接使用真实的HTML标签即可。
修正后的代码
code.gs
function sendEmail() { var fileNo = '12345'; // 关键:将创建的模板对象赋值给emailHTML var emailHTML = HtmlService.createTemplateFromFile('emailTemplate'); emailHTML.header = "New File Opened"; emailHTML.message = 'A new file has been opened. <br> File Information: <br>' + 'File Number: ' + fileNo + '<br>'; // 收件人邮箱需用字符串包裹 MailApp.sendEmail('me@me.com', 'New File', "No HTML Client", {htmlBody: emailHTML.evaluate().getContent()}); };
emailTemplate.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <div style="text-align:center; font-family:Cambria;"> <h2> <?= header ?> </h2> </div> <div style="background:#ececec; font-size:130%; color:black; margin-right:auto; margin-left:auto; padding:10px;"> <!-- 使用<?!= ?>避免HTML转义 --> <?!= message ?> <br> <br> </div> </body> </html>
关键说明
<?!= ?>:专门用于输出包含HTML代码的变量,跳过自动转义流程,让邮件客户端能正确解析HTML标签。- 变量赋值:如果没有将模板对象赋值给
emailHTML,后续的emailHTML.header和emailHTML.message设置会抛出未定义错误,这是原代码的隐性问题。
内容的提问来源于stack exchange,提问作者Databoy2k
相关产品推荐
相关产品推荐

