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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:15:22