Node.js 节点AWS-SDK SES电子邮件发送验证失败

Node.js 节点AWS-SDK SES电子邮件发送验证失败,node.js,amazon-web-services,aws-sdk,amazon-ses,Node.js,Amazon Web Services,Aws Sdk,Amazon Ses,我正在使用aws sdk使用Node发送aws SES电子邮件,并且我能够使用aws CLI成功发送电子邮件。但是,从我的节点脚本来看,由于某些原因,我的电子邮件验证失败 代码如下: const aws = require('aws-sdk') const ses = new aws.SES() const message = { Destination: { ToAddresses: ['example@example.com] },

我正在使用aws sdk使用Node发送aws SES电子邮件,并且我能够使用aws CLI成功发送电子邮件。但是,从我的节点脚本来看,由于某些原因,我的电子邮件验证失败

代码如下:

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
请帮忙!谢谢大家!

Per:

未验证电子邮件地址。以下身份未通过签入区域(region):(identity1),(identity2),(identity3)-您正在尝试从未经Amazon SES验证的电子邮件地址或域发送电子邮件。此错误可能适用于“发件人”、“源”、“发件人”或“返回路径”地址

如果您的帐户仍在沙箱中,您还必须验证每个收件人的电子邮件地址,但Amazon SES邮箱模拟器提供的收件人除外。如果Amazon SES无法显示所有失败的标识,则错误消息以省略号结尾

注意:Amazon SES在多个AWS区域中有端点,每个AWS区域的电子邮件地址验证状态是独立的。您必须为要使用的AWS区域中的每个发件人完成验证过程

我强烈怀疑您的应用程序配置与您用于通过CLI成功发送测试电子邮件的配置不完全匹配

检查以下配置:

  • “源”地址必须是us-east-1地区经SES验证的发件人。检查您希望从中发送电子邮件的源地址是否是您希望从中发送电子邮件的每个地区的已验证发件人
  • 如果启用SES沙箱模式,电子邮件收件人(“ToAddresses”值)也必须是us-east-1地区的SES验证发件人。有关如何删除此限制的说明,请参见“”
  • 确保您要测试的所有客户端都在同一个区域中进行测试,因为每个区域的配置都需要不同。错误消息提到应用程序试图命中us-east-1中的SES,因此请使用
    --region
    选项再次在us-east-1区域显式执行CLI测试。如果使用CLI默认区域,则初始CLI测试可能存在缺陷,并且该区域恰好不是us-east-1
  • 如果以上所有内容看起来都正确,请仔细检查节点应用程序。确保SES客户端针对您希望使用的区域进行了配置,并且客户端正确写入了您希望发送给SES请求的电子邮件
进一步阅读

以下是我使用node.js与express、ejs和npm包节点ses的代码

解决方案如上所述,但很容易遗漏。这是第三部分,在key和secret之后,是对amazon的回调-url需要在那里,并且需要为您所在的地区定制,在我的例子中是eu-west-1,其他两个选择是us-east-1或us-west-2

在IAM-User中找到了密钥和秘密。设置具有编程访问权限和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));
            }
         });
    });
app.post('/email',函数(req,res){
var ses=require('node-ses'),
client=ses.createClient({
键:“xxx”,
秘密:“xxx”,
亚马逊:'https://email.eu-west-1.amazonaws.com'});
client.sendmail({
致:“xxx”
,发件人:'xxx'
,抄送:“”
,密件抄送:“”
,主题:“问候”
,留言:“您的留言在这里”
,altText:“纯文本”
},函数(错误、数据、恢复){
如果(错误){
log('Email send Error:',JSON.stringify(err,null,2));
}否则{
log('Email send Success:',JSON.stringify(data,null,2));
}
});
});

sanitycheck:我猜您没有真正使用
example@example.com
——您的实际电子邮件地址是否是美国东部地区经SES验证的发件人?@AnthonyNeace谢谢您的提问!是的,它是use-east-1,我能够使用AWS CLI从终端成功发送电子邮件。下一个故障排除步骤:您是否仍处于SES沙箱模式,如果收件人的电子邮件地址可能也需要是该地区经SES验证的发件人?@AnthonyNeace我为发件人和收件人设置了相同的电子邮件地址,并且使用AWS CLI,我能够收到电子邮件。非常感谢!我一定会检查所有这些步骤