生产环境中Nodemailer对接SendinBlue抛出530无效凭证错误求助
可能的原因及对应解决方案
- SendinBlue IP白名单限制
SendinBlue默认会拦截未加入信任列表的IP地址的SMTP登录请求,即使用户名和密码完全正确也会返回530 Invalid username or password错误。你之前部署在Netlify时对应的出口IP可能已经被默认信任或者手动加入过白名单,而DigitalOcean Droplet的公网IP未被添加至SendinBlue后台的SMTP信任IP列表,是该问题最高发的原因。你可以登录SendinBlue控制台,在SMTP设置页面将Droplet的公网IP加入白名单后重试。 - 环境变量实际值偏差
你确认环境变量正常的前提下,仍需排查两处细节:一是Droplet上的.env文件中对应变量是否包裹了多余的引号,部分环境变量加载器会将引号作为值的一部分读取,导致密码校验失败;二是确保该段Nodemailer代码运行在Next.js的服务器端(接口路由、Server Component等),客户端侧代码无法读取NEXT_PUBLIC_前缀以外的环境变量,会导致读取到的账号密码为空。你可以在发送邮件的代码前添加日志打印process.env.SEND_IN_BLUE_USER和process.env.SEND_IN_BLUE_PASS,核对DO服务日志中的输出值是否和预期一致。 - 密钥类型不匹配
SendinBlue的API密钥和SMTP密钥是两套独立的密钥体系,API密钥仅可用于调用SendinBlue的HTTP接口,不可用于SMTP登录校验。确认你在DO环境中配置的SEND_IN_BLUE_PASS是SMTP专属密钥,而非普通的API密钥。 - Nodemailer内置服务配置异常
部分版本的Nodemailer内置的SendinBlue服务配置可能存在变动,你可以放弃service字段,显式指定SMTP配置规避该问题:const transporter = nodemailer.createTransport({ host: "smtp-relay.brevo.com", // SendinBlue已更名为Brevo,新的SMTP域名 port: 587, secure: false, auth: { user: process.env.SEND_IN_BLUE_USER, pass: process.env.SEND_IN_BLUE_PASS, }, }); - 账号权限临时受限
若刚好在切换部署平台的时间段内你的SendinBlue账号触发了发信量超限、身份校验未完成等限制,也会导致SMTP登录被拒绝,可登录SendinBlue后台查看账号状态及告警通知确认。
内容的提问来源于stack exchange,提问作者Goutham
相关产品推荐
相关产品推荐

