React项目中使用Nodemailer与Mailgen发送注册邮件失败求助
解决Nodemailer+Mailgen发送邮件无报错但收不到的问题
以下是针对你代码问题的具体修复步骤:
1. 修正Gmail授权方式
Gmail目前不允许直接使用账号密码作为Nodemailer的认证密码,必须使用应用专用密码(前提是你的谷歌账号开启了两步验证):
- 登录谷歌账号,开启两步验证;
- 进入谷歌账号“安全”设置,找到“应用专用密码”,生成一个专门用于Nodemailer的密码;
- 将生成的密码替换到代码中
config.auth.pass的位置。
如果暂时不想开启两步验证(不推荐),可以尝试开启“不太安全的应用访问”(注意谷歌已逐步淘汰该功能,后续可能失效)。
2. 替换硬编码的邮件地址
你代码里的收件人地址写死成了tosomeone@gmail.com,发件人地址也和认证邮箱不一致,这会导致邮件要么发到错误地址,要么被服务商拦截:
// 修改message部分 let message = { from: config.auth.user, // 发件人必须和config里的auth.user一致 to: req.body.email, // 改为注册用户的邮箱 subject: 'Registered successfully!', html: mail }
3. 正确处理sendMail的异步逻辑
原代码用回调函数处理sendMail,错误无法被外层try/catch捕获,还会导致邮件未发送完成就返回响应。改成Promise形式并添加await:
// 替换原来的回调写法 try { await transporter.sendMail(message); console.log('邮件发送成功'); } catch (sendError) { console.error('邮件发送失败:', sendError); // 可根据需求返回错误响应给前端 }
4. 优化Mailgen配置(可选但推荐)
把Mailgen的产品链接改成你自己项目的链接,避免使用默认的Mailgen官网链接,降低被判定为垃圾邮件的概率:
let mailGenerator = new Mailgen({ theme: 'default', product: { name: 'BabysitEase', link: 'https://你的项目域名.com/' // 替换成实际项目链接 } })
最后检查
发送测试邮件后,别忘了检查收件人的垃圾邮件/垃圾箱,很多时候邮件会被误判到这里。
内容的提问来源于stack exchange,提问作者Mustafa Mulla
相关产品推荐
相关产品推荐

