我正在使用aws-sdk使用Node发送AWS SES电子邮件,并且我能够使用AWS CLI成功发送电子邮件。但是,从我的Node脚本中,我的电子邮件验证由于某种原因而失败。
以下是代码:
const aws = require('aws-sdk')
const ses = new aws.SES()
const message = {
Destination: {
ToAddresses: ['example@example.com]
},
Message: {
Body: {
Text: {
Charset: 'UTF-8',
Data: 'Test body'
}
},
Subject: {
Charset: 'UTF-8',
Data: 'Test subject'
}
},
Source: 'example@example.com'
}
ses.sendEmail(message, function (err, data) {
if (err) console.log(err);
else console.log(data);
});
以下是错误:
message: 'Email address is not verified. The following identities failed the check in region US-EAST-1: example@example.com',
code: 'MessageRejected',
time: 2017-12-15T15:37:26.312Z,
requestId: 'random-id',
statusCode: 400,
retryable: false,
retryDelay: 15.030260565173382
请帮忙!谢谢!
答案 0 :(得分:2)
每AWS troubleshooting documentation:
未验证电子邮件地址。以下身份未通过签入区域(区域):( identity1),(identity2),(identity3) - 您尝试从尚未通过Amazon SES验证的电子邮件地址或域发送电子邮件。此错误可能适用于“发件人”,“来源”,“发件人”或“退货路径”地址。
如果您的帐户仍在沙箱中,您还必须验证除Amazon SES邮箱模拟器提供的收件人之外的每个收件人电子邮件地址。如果Amazon SES无法显示所有失败的身份,则错误消息以省略号结束。
注意:Amazon SES在多个AWS区域中都有端点,并且每个AWS区域的电子邮件地址验证状态都是独立的。您必须为要使用的AWS区域中的每个发件人完成验证过程。
我强烈怀疑您的应用程序的配置与您通过CLI成功发送测试电子邮件所用的配置不完全匹配。
检查以下配置:
--region
选项再次在us-east-1区域中显式执行CLI测试。如果使用CLI默认区域,则初始CLI测试可能存在缺陷,并且该区域恰好不是us-east-1。答案 1 :(得分:0)
这是我的代码,使用带有express,ejs和npm包的node-ses的node.js
上面已经提到了解决方案,但是很容易错过。这是第三部分,在密钥和秘密之后,是对亚马逊的回调-URL必须存在并且需要针对您所在的地区进行自定义,在我的例子中为eu-west-1,另外两个选择是us-east-1或us-west-2。
在IAM-用户中找到了密钥和机密。一旦设置了具有程序访问和AmazonSESFullAccess权限的用户。选择您的用户,然后选择“安全凭证”选项卡。向下滑动,然后单击创建访问密钥。
您只能获得一次访问您的秘密密码的权限。获得访问权限后,突出显示“秘密密码”,将其复制并与密钥一起安全地粘贴到某处。
您的电子邮件必须与在AWS SES页面上注册的域相关。如果您不托管Route 53,则还需要在AWS SES页面上注册并验证电子邮件。
这是路由器代码:
app.post('/email', function(req, res) {
var ses = require('node-ses'),
client = ses.createClient({
key: 'xxx',
secret: 'xxx',
amazon: 'https://email.eu-west-1.amazonaws.com'});
client.sendEmail({
to: 'xxx'
, from: 'xxx'
, cc: ''
, bcc: ''
, subject: 'greetings'
, message: 'your <b>message</b> goes here'
, altText: 'plain text'
}, function (err, data, res) {
if (err) {
console.log('Email send Error: ',JSON.stringify(err, null, 2));
} else {
console.log('Email send Success: ', JSON.stringify(data,null,2));
}
});
});