Node.js用Nodemailer调用AWS SES发件遇邮箱未验证错误求助
解决AWS SES + Nodemailer的“Email address is not verified”错误
这个错误我之前碰过好多次,核心原因是AWS SES新账户默认处于沙箱模式,这个模式下有严格的限制:
- 发件人和收件人的邮箱/域名必须在指定区域(这里是US-EAST-1)完成验证
- 每天发送邮件的数量有限制
- 只能发给已验证的身份
下面是一步步的解决办法:
1. 验证你的邮箱/域名(US-EAST-1区域)
- 登录AWS控制台,先切换到US-EAST-1区域(一定要选对,不同区域的验证身份不通用)
- 找到SES服务,进入「已验证的身份」页面
- 点击「创建身份」,选择你要验证的类型(邮箱或域名):
- 如果是邮箱:输入发件人邮箱,AWS会发一封验证邮件到这个地址,点击邮件里的链接完成验证
- 沙箱模式下,收件人邮箱也需要验证,同样添加收件人邮箱并完成验证步骤
2. 修正代码中的区域配置
你的代码里现在没指定区域,默认可能不是US-EAST-1,导致调用的区域和验证的区域不匹配,加上region参数就行:
const nodemailer = require('nodemailer'); var sesTransport = require('nodemailer-ses-transport'); var SESCREDENTIALS = { accessKeyId : "XXX" , secretAccessKey : "XXX" }; var transporter = nodemailer.createTransport(sesTransport({ accessKeyId: SESCREDENTIALS.accessKeyId, secretAccessKey: SESCREDENTIALS.secretAccessKey, region: 'us-east-1' // 必须指定和验证一致的区域 }));
3. (可选)退出沙箱模式(如果需要给未验证收件人发邮件)
如果你的业务需要给任意用户发邮件,沙箱模式肯定不够用,得申请退出:
- 在SES控制台找到「退出沙箱」的入口
- 填写申请信息:说明你的邮件使用场景(比如用户通知、业务邮件等),确保信息真实清晰,AWS一般几个工作日就会审核通过
额外注意点
- 检查你的IAM用户权限:确保该用户有SES发送邮件的权限,比如附加
AmazonSESFullAccess策略,或者自定义允许ses:SendEmail、ses:SendRawEmail操作 - 确认发件人邮箱和你验证的完全一致,大小写、拼写都不能出错,哪怕差一个字符都会报错
内容的提问来源于stack exchange,提问作者bhagyashree daiya
相关产品推荐
相关产品推荐

