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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:47:17