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

Nodemailer+Gmail发送邮件遇Error:535-5.7.8错误,求解决方案

问题排查与解决方案

核心问题分析

你遇到的Error:535-5.7.8 Username and Password not accepted主要来自两个关键问题:参数顺序错误导致发件人不匹配,以及异步函数未正确处理Promise导致错误捕获失效。

具体修复步骤

1. 修正sendEmail的参数传递顺序

你的sendEmail函数定义参数顺序是:(subject, message, send_to, send_from, reply_to),但注册路由里的调用完全搞反了发件人和收件人!Gmail要求发件人必须是你认证的邮箱(即process.env.EMAIL_USER),而收件人是新注册用户的邮箱。

正确调用代码:

try{
  await sendEmail(
    'Consumer account confirmation',
    `<h3>Welcome to Base herbal cosmetics</h3><p>Thank you for your registration</p><button>press here to join</button>`,
    email, // 这里是收件人(send_to)
    process.env.EMAIL_USER, // 这里是发件人(send_from)
    email
  )
}catch(err){
  return next(new ErrorHandling(err.message,err.statusCode));
}

2. 修复sendEmail的异步逻辑

当前sendEmail标记为async,但内部用了回调式的transporter.sendMail,既无法让await生效,回调里的错误也不会被外层try/catch捕获。改成Promise形式:

import nodemailer from 'nodemailer';

export const sendEmail=async(subject,message,send_to,send_from,reply_to)=>{
  const transporter=nodemailer.createTransport({
    service:process.env.EMAIL_SERVICE,
    auth:{
      user:process.env.EMAIL_USER,
      pass:process.env.EMAIL_PASS
    },
    tls:{
      rejectUnauthorized:false,
    }
  });

  const options={
    from:send_from,
    to:send_to,
    replyTo:reply_to,
    subject,
    html:message,
  }

  // 改用Promise语法,让await生效并抛出错误给外层捕获
  try {
    const info = await transporter.sendMail(options);
    console.log(info);
    return info;
  } catch (err) {
    console.log(err);
    throw err;
  }
}

export default sendEmail;

3. 验证环境变量配置

  • 确认EMAIL_SERVICE的值是'Gmail'(注意大小写,Nodemailer对这个字段敏感)
  • 确认EMAIL_USER是完整的Gmail邮箱地址(比如xxx@gmail.com)
  • 确认EMAIL_PASS是两步验证开启后生成的应用专用密码,无多余空格,生成时选择的应用类型为“邮件”或“其他(自定义名称)”

4. 额外检查项

  • 确保Gmail账号未开启“不太安全的应用访问”(开启两步验证后该选项会自动关闭,应用专用密码是正确替代方案)
  • 查看Gmail安全提醒,确认该应用专用密码的使用已被授权

测试验证

修改完成后重新注册用户,此时邮件逻辑会正确传递参数,错误也能被try/catch捕获。若仍有问题,控制台会输出更明确的错误信息,方便进一步排查。

内容的提问来源于stack exchange,提问作者JohnK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:07:51