1

@aws-sdk/client-ses我尝试在 Node 中使用 SDK 发送电子邮件,但我得到:

SignatureDoesNotMatch:我们计算的请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。

这是我的代码:

const aws = require("@aws-sdk/client-ses");

async function main() {
  const ses = new aws.SES({
    region: "eu-west-3",
    credentials: {
      accessKeyId: "REDACTED",
      secretAccessKey: "REDACTED"
    }
  });
  await ses.sendEmail({
    Destination: {
      ToAddresses: ["REDACTED@REDACTED.com"]
    },
    Message: {
      Subject: {
        Charset: "UTF-8",
        Data: "Test email"
      },
      Body: {
        Text: {
          Charset: "UTF-8",
          Data: "This is the message body in text format."
        }
      }
    },
    Source: "REDACTED@REDACTED.com"
  });
}

main().catch(console.error);

这段代码有问题吗?

谢谢

4

1 回答 1

0

好的,我发现我的错误:我使用的是用户生成的访问密钥,实际上是 SMTP 登录名/密码,而不是您可以在 SDK 中使用的访问密钥(即使它出现在 IAM 的访问密钥下)。

解决方案是在 IAM 中创建一个新的访问密钥,然后我使用nodemailer(因为否则我的代码使用操作ses:SendEmail而不是ses:SendRawEmail

const nodemailer = require("nodemailer");
const aws = require("@aws-sdk/client-ses");

async function main() {
  let transporter = nodemailer.createTransport({
    SES: {
      ses: new aws.SES({
        region: "eu-west-3",
        credentials: {
          accessKeyId: "REDACTED",
          secretAccessKey: "REDACTED"
        }
      }),
      aws
    }
  });
  await transporter.sendMail({
    from: "REDACTED@REDACTED.com",
    to: "REDACTED@REDACTED.com",
    subject: "Test email",
    text: "This is the message body in text format."
  });
}

main().catch(console.error);
于 2021-07-19T16:19:39.283 回答