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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:28:12