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

HTML联系表单+Google Apps Script无附件时邮件发送失败求助

解决方案:带/不带附件均正常发送的表单配置

1. 前端JavaScript修正

前端核心问题是无附件时可能误传空文件字段,且未根据后端真实响应判断发送状态。

修正代码

const formData = new FormData();
formData.append('name', document.getElementById('name').value);
formData.append('email', document.getElementById('email').value);

// 仅当存在文件时添加到FormData
const fileInput = document.getElementById('file');
if (fileInput.files.length > 0) {
  formData.append('file', fileInput.files[0]);
}

// 发送请求并根据后端返回判断结果
fetch('你的GAS部署URL', {
  method: 'POST',
  body: formData
})
.then(response => response.text())
.then(result => {
  alert(result === 'success' ? '发送成功' : `发送失败:${result}`);
})
.catch(() => alert('发送失败,请重试'));

2. Google Apps Script核心修正

GAS端需添加异常捕获与附件存在性判断,避免无附件时因无效参数导致静默失败。

修正代码

function doPost(e) {
  try {
    const name = e.parameter.name;
    const email = e.parameter.email;
    let attachments = [];

    // 判断是否有有效文件上传
    if (e.parameter.file && e.parameter.file.length > 0) {
      attachments.push(e.parameter.file);
    }

    // 发送邮件(空附件数组不会触发错误)
    MailApp.sendEmail({
      to: '你的收件邮箱',
      subject: '新表单提交',
      body: `姓名:${name}\n联系邮箱:${email}`,
      attachments: attachments
    });

    return ContentService.createTextOutput('success').setMimeType(ContentService.MimeType.TEXT);
  } catch (error) {
    // 返回错误信息,便于前端排查
    return ContentService.createTextOutput(`error: ${error.message}`).setMimeType(ContentService.MimeType.TEXT);
  }
}

3. 关键注意事项

  • 前端必须根据GAS返回的真实结果判断发送状态,不能仅靠请求成功就提示发送成功。
  • GAS必须添加异常捕获,否则错误会被静默吞掉,导致前端误判。
  • 无附件时不要向FormData添加空文件字段,或在GAS端做好空值处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:43