使用Nodemailer发邮件遇问题:PLAIN认证凭据缺失且未收到邮件
问题排查:邮件发送报错
Missing credentials for "PLAIN"及未收到邮件 核心错误原因及修复步骤
1. SMTP配置冲突(直接触发Missing credentials for "PLAIN")
你的SMTP配置中端口与secure参数不匹配,导致认证流程异常:
- Gmail的465端口是SSL加密端口,需设置
secure: true;587端口才是TLS端口,对应secure: false+requireTLS: true - 当前代码里
port:465却设secure:false,会让SMTP客户端尝试用PLAIN认证但无法正确传递凭证,触发错误
修复后的SMTP配置:
let trans = nodeemail.createTransport({ host: "smtp.gmail.com", port: 465, secure: true, // 465端口必须设为true auth:{ user: config.emailUser, pass: config.emailPassword } })
2. 发件人字段拼写错误
mailoptions里的form是拼写错误,正确字段名是from,这个错误会导致邮件发送失败或被拒收:
// 错误:form: config.emailUser from: config.emailUser, // 修正为from
3. HTML模板语法错误
你的HTML字符串存在引号未闭合、URL格式错误问题:
http//:localhost应为http://localhost- 拼接token的部分引号配对混乱,导致HTML结构无效
修复后的HTML模板(建议用模板字符串避免拼接错误):
html: `<p>hii ${firstName}, please copy the link <a href="http://localhost:5001/resetpassword?token=${token}">重置密码</a></p>`
4. 函数未调用+代码冗余
你定义了emailsend函数,但代码里没有调用这个函数的逻辑,而且重复写了mailoptions和sendMail的代码,这会导致邮件根本不会被发送。需要在查询到用户信息后,执行emailsend(email, firstName, token)触发邮件发送。
5. Gmail账号权限问题
如果上述配置修复后仍报错,检查:
- 用
console.log(config.emailUser, config.emailPassword)验证配置是否正确加载 - 若Gmail账号开启了2FA,必须使用应用专用密码代替普通密码
- 确保账号未被Google限制SMTP访问
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

