Node.js+Nodemailer发送邮件报错ReferenceError: data未定义
排查Node.js v18.15.0 + Nodemailer中「ReferenceError: data is not defined」错误
错误根源
你提供的代码中,包含transporter.sendMail的sendEmail函数未声明接收data参数,导致当你在forgotPasswordToken方法里调用sendEmail(data)时,函数内部无法识别data变量,直接触发「ReferenceError: data is not defined」。另外,sendEmail是异步函数,调用时未加await,还可能引发未捕获的Promise异常。
解决方法
1. 修正sendEmail函数定义
给sendEmail添加data参数,并声明为async函数(因为用到了await transporter.sendMail):
// 修正后的sendEmail函数 const sendEmail = async (data) => { // send mail with defined transport object let info = await transporter.sendMail({ from: '"hey" <abc@gmail.com>', to: data.to, subject: data.subject, text: data.text, html: data.html, }); // 可选:添加日志查看发送状态 console.log("邮件发送成功,ID:%s", info.messageId); };
2. 函数调用时添加await
在forgotPasswordToken方法里调用sendEmail时,加上await,保证异步操作完成:
// 原代码中的sendEmail(data)修改为: await sendEmail(data);
3. 检查函数定义顺序
确保sendEmail函数在forgotPasswordToken方法之前定义,或者提前用function声明(避免变量提升问题)。
内容的提问来源于stack exchange,提问作者Kayode Victor
相关产品推荐
相关产品推荐

