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

Google表单自动回复脚本报错:TypeError: Cannot read property "values" from undefined

解决Google Apps Script表单触发邮件的TypeError问题

看起来你遇到的TypeError: Cannot read property "values" from undefined问题,主要有两个核心原因,结合你的代码和场景,我来一步步帮你解决:

1. 触发方式错误导致事件对象e未定义

这个报错最常见的情况是你手动运行了myFunction函数——当你手动执行时,函数没有接收到表单提交的事件对象e,所以e是undefined,自然没法读取namedValues属性。

解决办法:

  • 确保你设置的是**“表单提交”触发器**,而不是时间驱动或其他类型的触发器。
  • 测试时不要直接点代码编辑器里的运行按钮,而是去你的Google表单里提交一条测试数据,让触发器自动触发函数。

2. 表单字段名与代码里的键不匹配

你提到表格列名为code,但你的代码里写的是e.namedValues.Code——namedValues的键是表单字段的显示名称(完全区分大小写),如果表单里的字段名是小写的code,代码里用大写Code就会取不到值,甚至可能引发后续问题。另外还要检查Name、Tag这些字段名是否和表单里的完全一致(包括空格、大小写)。

修正后的完整代码

我帮你调整了代码,加上了字段名匹配修正、空值检查,还有字符串拼接的空格问题(原来的邮件内容里有些地方没空格,会导致文本连在一起):

function myFunction(e) {
  // 先判断事件对象是否存在,避免手动运行报错
  if (!e || !e.namedValues) {
    Logger.log("请通过表单提交触发此函数,不要手动运行");
    return;
  }

  // 注意:这里的键要和表单字段的显示名称完全一致(区分大小写)
  // 假设你的表单字段名是:Name、Tag、Timestamp、code
  var userName = e.namedValues["Name"]?.[0] || "未知用户";
  var userEmail = e.namedValues["Tag"]?.[0] || "";
  var date = e.namedValues["Timestamp"]?.[0] || "";
  var caseCode = e.namedValues["code"]?.[0] || "无编号";

  // 检查邮箱是否有效,避免发送失败
  if (!userEmail) {
    Logger.log("未获取到用户邮箱,无法发送邮件");
    return;
  }

  var subject = caseCode;
  var message = `Thanks, ${userName} for submitting your data. Remember to take note of your Case number: ${caseCode}. You'll need this for you or the customer to find the case again. Submitted on: ${date}`;

  // 发送邮件
  MailApp.sendEmail(userEmail, subject, message);
}

额外注意事项

  • 确认你的Google账号已经授权脚本访问MailApp服务(第一次触发时会弹出授权请求,需要允许)。
  • 表单里的Tag字段是用来收集用户邮箱的,要确保用户填写的是有效的邮箱地址,否则邮件会发送失败。

内容的提问来源于stack exchange,提问作者Andrew Bullimore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:22:56