Google Apps Script开发HTML Web应用时doGet报错与找不到文件问题咨询
问题原因
- 代码中两处调用HTML模板的文件名不统一:
getMessagesDisplay函数调用createTemplateFromFile('messages'),doGet函数中却写的是createTemplateFromFile('messages.html'),Google Apps Script加载HTML模板时只需填写文件名称,无需额外加.html后缀 - 当前GAS项目中未创建名为
messages的HTML文件,调用时找不到对应资源
doGet函数基础说明
doGet是Google Apps Script发布为Web应用时的强制入口函数,必须直接放在Code.gs文件的顶层,不能嵌套在其他函数内部。用户访问Web应用的公网URL时,GAS会自动触发执行doGet函数,将函数返回的内容渲染为前端页面。
修复步骤及正确示例
- 首先在GAS项目中新建HTML文件,命名为
messages,系统会自动生成带后缀的messages.html文件,无需手动修改后缀 - 修正Code.gs代码如下:
// 从Gmail获取符合条件的邮件 function getRelevantMessages() { var threads = GmailApp.search("from:mike@lifewayhomes.net AND subject: Fwd: New submission from Find Me the Perfert Home", 0, 10); var messages = []; threads.forEach(function(thread) { messages.push(thread.getMessages()[0]); }); return messages; } // Web应用入口函数 function doGet(e) { // 加载HTML模板,仅填写文件名前缀即可 var templ = HtmlService.createTemplateFromFile('messages'); // 将查询到的邮件数据传递给HTML模板 templ.messages = getRelevantMessages(); // 渲染模板并返回,同时设置页面标题 return templ.evaluate().setTitle("messages"); }
messages.html参考示例:
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <h1>匹配的邮件列表</h1> <? for(var i=0; i<messages.length; i++) { ?> <div style="margin: 20px 0; padding: 15px; border: 1px solid #eee;"> <h3>主题:<?= messages[i].getSubject() ?></h3> <p>发件人:<?= messages[i].getFrom() ?></p> <p>发送时间:<?= messages[i].getDate() ?></p> <p>内容:<?= messages[i].getPlainBody() ?></p> </div> <? } ?> </body> </html>
部署注意事项
- 代码修改后需要发布新版本才会生效,旧测试部署链接不会同步更新修改内容
- 部署时根据需求选择访问权限范围,调用Gmail接口时需要按照提示完成相关权限授权
内容的提问来源于stack exchange,提问作者Brenda Harrison
相关产品推荐
相关产品推荐

