使用Nodemailer发送邮件附件报错“Unexpected identifier”求助
解决Nodemailer发送带附件邮件的"Unexpected identifier"错误
嘿,我来帮你排查这个问题!你遇到的Unexpected identifier错误根本不是因为Node.js不认识attachments字段,而是代码里的一个语法小疏忽——你的html字段结尾少了一个逗号,导致解析器到attachments的时候无法识别它的语法位置。
另外,你的代码里还有两个小问题需要调整:
attachments里的字段名写错了,Nodemailer用的是path而不是filePath;- 你在attachments里重复添加了同一个文件的配置,这会导致重复附件,需要合并成正确格式;
- 你的Gmail账户拼写错了(
my gamil→my gmail),不过这个属于细节问题。
修正后的完整代码
const path = require('path'); // 记得引入path核心模块(无需额外安装) app.post("/send", function(req,res){ var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'my gmail', // 修正拼写错误 pass: 'my gmail password' } }); const mailOptions = { from: req.body.fr, to: req.body.to, bcc: req.body.fr, subject: req.body.subject, // 这里添加了逗号!之前就是因为缺了它导致语法错误 html: '<h4>Dear ' + req.body.contname+ '</h4>' + '<p>'+ req.body.message + '</p>' + '<p>Kind Regards</p>' + req.body.user, attachments: [ { filename: req.body.myFileName || 'attachment.ext', // 自定义附件显示的文件名,可从请求参数获取 path: path.resolve(req.body.myFile) // 用path.resolve确保路径正确,Nodemailer识别的是path字段 } ], }; transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('Message sent: %s', info.messageId); console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info)); }); });
关于额外npm包的问题
不需要安装其他额外的npm包!nodemailer本身就原生支持附件功能,path是Node.js自带的核心模块(甚至不需要npm安装,直接引入即可)。只要你的语法正确,现有依赖完全足够。
补充一点:如果你的文件是从前端上传的,req.body.myFile可能拿不到正确的文件路径——这种情况需要用multer之类的中间件处理文件上传逻辑,但这是后续的优化问题,当前先解决语法错误就能让代码正常运行了。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

