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
相关产品推荐
相关产品推荐

