You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GAS表单提交触发sendEmail时报Cannot read property 'response' of undefined错误

问题排查与解决方案

错误根因

你遇到的两个报错存在直接关联:sendEmail是绑定谷歌表单提交事件的回调函数,必须由表单提交动作触发运行,此时谷歌会自动传入包含提交全量信息的事件对象e。你直接在Apps Script编辑器点击「运行」按钮测试时,没有传入事件参数e,导致e为undefined,触发Cannot read property 'response' of undefined报错;同时e.response.getRespondentEmail()无法获取到有效收件人,触发无收件人退信。

分步修复操作

  • 修正HTML模板渲染逻辑
    当前代码中html.getCode()调用错误,该方法返回的是模板的原始代码字符串,而非渲染完成的可发送HTML正文。需替换为evaluate().getContent()完成模板渲染,修正后的代码片段如下:
    function sendEmail(e) {
      var html = HtmlService.createTemplateFromFile("email.html");
      // 替换原getCode()调用为以下内容
      var htmlText = html.evaluate().getContent();
      
      var emailTo = e.response.getRespondentEmail();
      var subject = "Thanks for participating";
      var textBody = "This email requires HTML support, please make sure you open with a client that supports it.";
      var options = { htmlBody: htmlText };
      
      if(emailTo !== undefined && emailTo !== ""){
        GmailApp.sendEmail(emailTo,subject,textBody,options);
      }
    }
    
  • 确认表单已开启邮箱收集权限
    打开绑定的谷歌表单,进入「设置」→「回复」分类,确认已勾选「收集邮箱地址」选项,否则getRespondentEmail()接口会返回空值,无法获取收件人。
  • 配置正确的表单提交触发器
    1. 打开Apps Script编辑器,点击左侧菜单栏的「触发器」(闹钟样式图标)
    2. 点击右下角「添加触发器」按钮
    3. 选择要运行的函数为sendEmail
    4. 选择事件来源为「表单」
    5. 选择事件类型为「表单提交时」
    6. 保存触发器,按照页面提示完成权限授权
  • 正确测试脚本
    不要直接在编辑器内运行函数,打开谷歌表单,填写并提交一次测试数据,脚本会自动触发运行,此时事件对象e会由谷歌自动传入,不会再出现undefined错误。

内容的提问来源于stack exchange,提问作者UD.Cole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:27:00