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

如何通过Gmail API使用Nodemailer SMTP OAuth2?遇错误535:用户和密码不被接受

解决Gmail OAuth2 + Feathers-Mailer出现的535认证错误

这个535错误本质是因为你的SMTP传输配置没有正确使用OAuth2认证机制,而是在尝试用传统的用户名密码登录——而Gmail现在对非OAuth2的登录方式限制非常严格,甚至直接禁止,所以才会报“用户和密码不被接受”。

下面是具体的解决步骤和正确配置示例:

1. 使用Nodemailer的OAuth2专用配置

Feathers-Mailer是基于Nodemailer封装的,所以需要按照Nodemailer的OAuth2规范来配置传输器,而不是普通的SMTP用户名密码配置。替换你现有的代码为以下结构:

const mailer = require('feathers-mailer');
const nodemailer = require('nodemailer');

// 构建OAuth2认证的SMTP传输器
const gmailTransporter = nodemailer.createTransport({
  service: 'Gmail',
  auth: {
    type: 'OAuth2', // 必须指定认证类型为OAuth2
    user: 'your-email-address@gmail.com', // 你的Gmail邮箱地址
    clientId: 'YOUR_GOOGLE_OAUTH_CLIENT_ID', // 从API控制台获取的客户端ID
    clientSecret: 'YOUR_GOOGLE_OAUTH_CLIENT_SECRET', // 从API控制台获取的客户端密钥
    refreshToken: 'YOUR_REFRESH_TOKEN_FROM_OAUTH_PLAYGROUND', // 从OAuth Playground获取的刷新令牌
  }
});

// 将配置好的传输器挂载到Feathers服务
app.use('/api/mailer', mailer(gmailTransporter));

2. 关键检查点

确保以下几点都正确,避免踩坑:

  • 确认OAuth凭证信息正确:检查clientId、clientSecret、refreshToken有没有复制错误,不要包含多余的空格或特殊字符。
  • 权限范围有效性:你设置的https://mail.google.com/是最高权限范围,完全覆盖邮件发送需求,这个没问题。
  • 刷新令牌有效性:
    • 登录你的Google账号,进入「安全」→「第三方应用权限」,确认你的OAuth应用仍有访问Gmail的权限,没有被撤销。
    • 如果刷新令牌过期,可以重新在OAuth Playground中获取(注意要使用同一个OAuth客户端ID)。
  • 账号类型适配:如果是Google Workspace(原G Suite)账号,需要联系管理员确认是否允许该OAuth应用访问企业邮箱;个人账号则无需额外配置,只要OAuth流程正确即可。

3. 先单独测试Nodemailer配置

为了排除Feathers集成的问题,你可以先写一段简单的Nodemailer测试代码,验证OAuth2配置是否能正常发送邮件:

const nodemailer = require('nodemailer');

async function testSendMail() {
  const transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
      type: 'OAuth2',
      user: 'your-email@gmail.com',
      clientId: 'YOUR_CLIENT_ID',
      clientSecret: 'YOUR_CLIENT_SECRET',
      refreshToken: 'YOUR_REFRESH_TOKEN',
    }
  });

  const info = await transporter.sendMail({
    from: 'your-email@gmail.com',
    to: 'recipient@example.com',
    subject: 'Test OAuth2 Email',
    text: 'This is a test email sent via Gmail OAuth2.'
  });

  console.log('Email sent: ' + info.response);
}

testSendMail().catch(console.error);

如果这段测试代码能成功发送邮件,再集成到Feathers-Mailer中就不会有问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:34:02