使用SMTPjs从模态表单发送邮件的代码问题求助
代码问题分析及修正方案
核心问题点
To字段错误:你把console.log语句直接赋值给To,这会导致收件人地址为undefined(console.log无返回值),应直接使用inputEmail.value作为收件人地址。Body字段语法错误:不能在对象属性值中直接用let声明变量,且邮件正文需要是字符串/HTML格式,不能直接传入JavaScript对象。需先在函数内构建结果对象,再转换为适合邮件展示的文本结构。- Promise回调语法错误:
.then()未传入回调函数,末尾多了冗余的});,导致语法不闭合。 - SMTP配置无效:
Host字段填写的smtp.host.email是无效占位符,需替换为真实的SMTP服务器地址(如smtp.gmail.com)。
修正后的代码示例
function sendEmail() { // 先构建结果对象 const results = { Digestivo: calculateResultInWords(result.D), Cardiovascular: calculateResultInWords(result.I), 'Salud General': calculateResultInWords(result.C), Nervioso: calculateResultInWords(result.N), Inmunológico: calculateResultInWords(result.M), Respiratorio: calculateResultInWords(result.R), Urinario: calculateResultInWords(result.U), Endócrino: calculateResultInWords(result.G), Estructural: calculateResultInWords(result.E) }; // 将结果转为易读的HTML邮件正文 let bodyHtml = '<h2>表单检测结果</h2><ul>'; for (const [key, value] of Object.entries(results)) { bodyHtml += `<li><strong>${key}</strong>: ${value}</li>`; } bodyHtml += '</ul>'; // 发送邮件 Email.send({ Host: "smtp.xxx.com", // 替换为真实SMTP服务器地址 Username: "user@domain.com", Password: "password", // 生产环境禁止硬编码密码,建议用后端转发 To: inputEmail.value, From: "user@domain.com", Subject: subject, // 确保subject变量已正确定义 Body: bodyHtml }).then(message => { console.log('邮件发送成功:', message); // 可添加发送成功后的操作,比如关闭模态框、提示用户 }).catch(error => { console.error('邮件发送失败:', error); // 处理发送失败的情况 }); }
额外注意事项
- 确保
inputEmail、result、subject这些变量在sendEmail函数作用域内可访问。 - 部分SMTP服务商(如Gmail)需要开启低安全性应用访问或使用应用专用密码,否则会验证失败。
- 生产环境建议通过后端接口转发邮件,避免前端暴露SMTP账号密码等敏感信息。
内容的提问来源于stack exchange,提问作者Patricio Miño
相关产品推荐
相关产品推荐

