使用Nodemailer调用微软Live邮箱报错535 5.7.139,求解决方案
解决Nodemailer适配微软邮箱(live.cn)时的535认证失败问题
Nodemailer仍然可以适配微软邮箱,你遇到的535 5.7.139错误是因为微软逐步淘汰了SMTP协议的基础认证方式——即使你使用了MFA应用密码,当前账号的基础SMTP认证已被禁用,必须切换到OAuth2认证方案。
错误原因
微软从2024年开始对Outlook/live.cn等个人及部分企业账号关闭了SMTP基础认证通道,无论是否使用应用密码,基础认证(账号+密码直接校验)都会被拒绝,因此原配置不再生效。
解决方案:切换到OAuth2认证
你需要修改Nodemailer的传输配置,改用OAuth2认证方式,步骤如下:
在Azure AD注册应用并配置权限
- 登录Azure门户,注册一个新的应用程序
- 为应用添加
Microsoft Graph的SMTP.Send权限(权限类型选择Delegated或Application,个人账号推荐前者) - 获取应用的
客户端ID、客户端密钥、租户ID,如果用Delegated权限还需要生成刷新令牌
更新Nodemailer配置代码
替换原有的认证配置为OAuth2类型:
const nodemailer = require('nodemailer'); const ENV = process.env; const transporter = nodemailer.createTransport({ host: 'smtp.office365.com', port: 587, secure: false, auth: { type: 'OAuth2', user: ENV.SENDER_USER, clientId: ENV.OAUTH_CLIENT_ID, clientSecret: ENV.OAUTH_CLIENT_SECRET, refreshToken: ENV.OAUTH_REFRESH_TOKEN, tenantId: ENV.OAUTH_TENANT_ID } });
补充说明
- 若为个人live.cn账号,使用
Delegated权限时,需要通过OAuth授权流程获取刷新令牌,该令牌可以长期用于获取访问令牌 - 企业账号可选择
Application权限,无需刷新令牌,但需要管理员同意权限申请 smtp.office365.com是微软统一的SMTP服务器地址,替代原smtp-mail.outlook.com兼容性更好
内容的提问来源于stack exchange,提问作者yunnysunny
相关产品推荐
相关产品推荐

