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

NextAuthJs用Gmail SMTP发魔法链接时遇Missing credentials for PLAIN错误

解决NextAuth邮件登录报错:Missing credentials for "PLAIN"

问题情况

我正在学习用NextAuth实现身份认证,已配置Gmail的SMTP服务,但每次请求魔法链接时都会报错:[next-auth][error][SIGNIN_EMAIL_ERROR] Missing credentials for "PLAIN"

错误日志

[next-auth][error][SIGNIN_EMAIL_ERROR] 
Missing credentials for "PLAIN" {
  error: {
    message: 'Missing credentials for "PLAIN"',
    stack: 'Error: Missing credentials for "PLAIN"\n' +
      '    at SMTPConnection._formatError (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:790:19)\n' +
      '    at SMTPConnection.login (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:444:38)\n' +
      '    at C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-transport\\index.js:272:32\n' +      
      '    at SMTPConnection.<anonymous> (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:213:17)\n' +
      '    at Object.onceWrapper (node:events:627:28)\n' +
      '    at SMTPConnection.emit (node:events:513:28)\n' +
      '    at SMTPConnection.emit (node:domain:489:12)\n' +
      '    at SMTPConnection._actionEHLO (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:1325:14)\n' +
      '    at SMTPConnection._processResponse (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:953:20)\n' +
      '    at SMTPConnection._onData (C:\\Users\\Jacob Mutale\\node_modules\\nodemailer\\lib\\smtp-connection\\index.js:755:14)',
    name: 'Error'
  },
  providerId: 'email',
  message: 'Missing credentials for "PLAIN"'
}

我的auth/[...nextauth].js代码

import NextAuth from "next-auth";
import EmailProvider from "next-auth/providers/email";
import nodemailer from "nodemailer";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();
console.log(process.env.EMAIL_SERVER_USER);
console.log(process.env.EMAIL_SERVER_PASSWORD);
export default NextAuth({
  providers: [
    EmailProvider({
      server: {
        host: process.env.EMAIL_SERVER_HOST,
        port: process.env.EMAIL_SERVER_PORT,
        auth: {
          user: process.env.EMAIL_SERVER_USER,
          password: process.env.EMAIL_SERVER_PASSWORD,
        },
      },
      from: process.env.EMAIL_FROM,
      maxAge: 10 * 60,
    }),
  ],
  adapter: PrismaAdapter(prisma),
});

解决方案

  • 验证环境变量加载:先看控制台打印的EMAIL_SERVER_USER和EMAIL_SERVER_PASSWORD是否有值。如果是undefined,检查.env.local文件配置是否正确,变量名是否完全匹配,并且重启开发服务器让环境变量生效。
  • 使用Gmail应用专用密码:Gmail现在不允许直接用账号密码登录SMTP,必须开启两步验证后生成应用专用密码,替换EMAIL_SERVER_PASSWORD的值。
  • 修正端口类型:port需要是数字类型,把代码里的port: process.env.EMAIL_SERVER_PORT改成port: Number(process.env.EMAIL_SERVER_PORT)。
  • 确认Gmail SMTP参数:Gmail的SMTP服务器地址是smtp.gmail.com,SSL端口用465,TLS端口用587,对应配置要和这个一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:35:27