Node.js使用Office 365发邮件报535-5.7.8用户名密码不被接受错误如何解决
535-5.7.8 登录验证失败排查及解决方法
排查步骤
- 验证环境变量读取是否正确:打印
process.env.MAIL_USERNAME和process.env.MAIL_PASSWORD,确认加载的账号密码无拼写错误、前后无多余空格,且MAIL_USERNAME是完整的Outlook邮箱地址,不可只填写邮箱前缀。 - 验证发件人地址一致性:发信参数中
from字段使用的settingObj.Contact_Email,必须和process.env.MAIL_USERNAME的值完全一致,Outlook不允许使用登录账号以外的地址发信,会直接触发验证拦截。 - 验证账号安全配置:Outlook365默认拦截低信任度客户端登录,先确认账号是否开启了多因素认证(MFA),若开启了MFA,普通密码登录会直接被拒绝。
- 验证TLS配置有效性:当前配置中
tls: { ciphers: 'SSLv3' }已经过时,Office365现在要求使用TLS 1.2及以上版本,旧的SSLv3配置会导致握手失败触发验证错误。
解决方案
账号未开启多因素认证
首先修正传输配置的TLS参数,修改后的配置如下:
this._transport = nodemailer.createTransport({ service: 'Outlook365', host: 'smtp.office365.com', port: 587, secure: false, // 587端口使用STARTTLS,此处固定为false auth: { user: process.env.MAIL_USERNAME, pass: process.env.MAIL_PASSWORD, }, tls: { ciphers: 'TLSv1.2', rejectUnauthorized: false // 可选,适配部分证书校验异常的场景 } })
之后进入对应邮箱账号的安全设置,开启「允许低安全性应用登录」选项;如果是企业版账号,需要联系管理员在租户后台开启该权限。
账号已开启多因素认证
不能直接用账号原密码登录,需要生成应用专用密码:
- 登录Outlook账户,进入安全信息页面
- 选择「添加方法」,选中「应用密码」
- 将生成的专用密码替换原来的
process.env.MAIL_PASSWORD的值即可。
额外注意事项
- 所有发信请求的
from字段必须和登录的邮箱账号完全一致,不要使用别名或其他地址,否则也会触发验证错误。 - 如果是企业版Office365,需要联系管理员确认SMTP AUTH功能已经为该账号开启,默认部分企业租户会关闭这个功能。
内容的提问来源于stack exchange,提问作者Twix
相关产品推荐
相关产品推荐

