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

使用Nodemailer发送邮件附件报错“Unexpected identifier”求助

解决Nodemailer发送带附件邮件的"Unexpected identifier"错误

嘿,我来帮你排查这个问题!你遇到的Unexpected identifier错误根本不是因为Node.js不认识attachments字段,而是代码里的一个语法小疏忽——你的html字段结尾少了一个逗号,导致解析器到attachments的时候无法识别它的语法位置。

另外,你的代码里还有两个小问题需要调整:

  1. attachments里的字段名写错了,Nodemailer用的是path而不是filePath;
  2. 你在attachments里重复添加了同一个文件的配置,这会导致重复附件,需要合并成正确格式;
  3. 你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:40