联系表单无法解析全部字段问题求助
问题分析与解决方案
看起来你遇到的核心问题是自定义字段没有被包含到邮件的实际内容中,同时还有一处大小写不一致的细节需要修正,具体来说:
问题1:Nodemailer不会自动渲染自定义字段
你在mailOptions里直接添加了Name、Company、Phone这些自定义属性,但Nodemailer的mailOptions只识别标准字段(比如from、to、subject、text、html),这些自定义字段不会被自动解析并显示在邮件里——这就是为什么只有Message字段能正常显示,因为你把它放到了text和html字段中。
问题2:req.body字段大小写不一致
你的表单里Message字段的name属性是小写的body,但在app.js里你写了req.body.Body(大写B),虽然你说Message能正常提交,可能是代码笔误,但这个点要注意:HTTP表单提交的字段名是大小写敏感的,必须严格匹配。
修正后的代码示例
1. 更新app.js的mailOptions
把所有表单字段整合到text和html内容里,这样所有数据都会出现在邮件中:
let mailOptions = { from: '"Nodemailer Contact" <**********>', // sender address to: '*************', // list of receivers subject: 'TW Contact Request', // Subject line // 纯文本格式的邮件内容 text: ` Contact Request Details: ------------------------ Name: ${req.body.Name} Company: ${req.body.Company} Contact Number: ${req.body.Phone} Message: ${req.body.body} `, // HTML格式的邮件内容(更美观) html: ` <h3>Contact Request Details</h3> <hr> <p><strong>Name:</strong> ${req.body.Name}</p> <p><strong>Company:</strong> ${req.body.Company}</p> <p><strong>Contact Number:</strong> ${req.body.Phone}</p> <p><strong>Message:</strong><br>${req.body.body.replace(/\n/g, '<br>')}</p> ` };
2. 确保表单字段与req.body完全匹配
检查你的index.ejs表单,所有name属性和req.body的调用要严格一致:
- Name字段
name="Name"→ 对应req.body.Name✔️ - Company字段
name="Company"→ 对应req.body.Company✔️ - Phone字段
name="Phone"→ 对应req.body.Phone✔️ - Message字段
name="body"→ 对应req.body.body✔️(注意这里是小写b,不要写成大写B)
3. 确认Express的body解析中间件已配置
如果你用的是Express框架,确保已经添加了表单解析的中间件,否则req.body会是空的:
const express = require('express'); const app = express(); // 解析URL编码的表单数据(必须添加) app.use(express.urlencoded({ extended: true }));
测试提示
修改完成后,重新启动服务器,提交表单后检查邮件,应该就能看到所有字段的数据了。如果还是有问题,可以在app.js里添加一行日志,打印req.body的内容,确认所有字段是否都被正确接收:
console.log('Received form data:', req.body);
内容的提问来源于stack exchange,提问作者TsioTho
相关产品推荐
相关产品推荐

