我正在使用nodejs nodemailer连接到亚马逊SES电子邮件服务。这一切看起来很简单,但我一直得到错误:
"我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。"
我已经在网上搜索过了,大多数人说这是因为你的秘密密钥末尾有一个空格,或者有时正斜杠可能会导致问题。最后一个不再是一个问题,因为我一直在创建SMTP凭据,直到没有一个。我现在已经创建了大约10个SMTP凭据,每次复制并粘贴AccessKey和SecretKey,我仍然得到这个错误。我也试过使用http://email-smtp.us-west-2.amazonaws.com,仍然得到同样的错误。
下面是我的代码:var nodemailer = require("nodemailer");
var transport = nodemailer.createTransport("SES",
{
AWSAccessKeyID: 'AKIA************',
AWSSecretKey: 'AqlwF*****************************',
SeviceUrl: 'http://email-smtp.us-east-1.amazonaws.com'
});
nodemailer.sendMail({
transport : transport,
sender : 'some@thing.com' ,
to : 'another@address.com',
subject : 'TEST',
html: '<p> Hello World </p>'
}, function(error, response)
{
if(error){ console.log(error); }
else{ console.log("Message sent: " + response.message);}
});
谁知道我还能做什么? 使用AWS SMTP凭据时会发生这种情况。应该创建一个AIM用户,并为其分配如下所示的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ses:SendEmail", "ses:SendRawEmail"],
"Resource": "*"
}
]
}
Amazon ses允许您向在Amazon aws帐户上注册的电子邮件地址发送电子邮件。你可以试着验证一下,也许这就是问题所在。
http://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html这里有关于如何验证它们的描述。
编辑:nodemailer的步骤确保传输正常工作。1.准备好基本的ses传送器。你可以用同样的方法创建它。(你做了)
var nodemailer = require("nodemailer");
var transport = nodemailer.createTransport("SES",
{
AWSAccessKeyID: 'AKIA************',
AWSSecretKey: 'AqlwF*****************************',
SeviceUrl: 'http://email-smtp.us-east-1.amazonaws.com'
});
mail={
transport : transport,
sender : 'some@thing.com' ,
to : 'another@address.com',
subject : 'TEST',
html: '<p> Hello World </p>'
};
从您的amazon aws帐户获取访问keyId和awsSecretKey。
现在,一旦您完成了上述步骤,您将能够向您在amazon ses帐户中注册的电子邮件地址发送邮件。(验证链接将发送到您请求访问的电子邮件帐户,您需要点击它们进行验证)。通过您的帐户验证电子邮件地址的链接是我上面发布的链接。
看来你并没有这样做。所以注册电子邮件地址您想要发送电子邮件到(也从!),并使用这些电子邮件地址在您的代码的收件人和发件人地址。
如果你想发送电子邮件到你没有注册的电子邮件地址,你需要申请一个高级访问权限。它可以在您的帐户生产访问下找到。对该页面的引用是
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/request-production-access.html希望这能解决你的问题。谢谢Rob的建议。