【发布时间】:2023-02-02 03:29:12
【问题描述】:
我已尝试使用以下 Node.js JavaScript AWS SDK 代码通过 AWS SES 在我的 LightSail 实例上发送电子邮件,但失败并显示以下错误消息。电子邮件发送代码在我的开发计算机上运行良好。 (邮件发送码来自https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/ses-examples-sending-email.html.)
(代码在这里)
import { readFile } from 'fs/promises';
import * as path from 'path';
import { SESClient } from "@aws-sdk/client-ses";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const awsConfigFileFullName = "aws_config.json";
let awsConfigFileFullPath = path.join(__dirname, awsConfigFileFullName);
const awsConfig = await readFile(awsConfigFileFullPath).then(json => JSON.parse(json)).catch(() => null);
aws_ses_client = new SESClient({ region: awsConfig.region, accessKeyId: awsConfig.accessKeyId, secretAccessKey: awsConfig.secretAccessKey });
const createSendEmailCommand = (toAddress, fromAddress, htmlContent, textContent, emailSubject) => {
return new SendEmailCommand({
Destination: {
/* required */
CcAddresses: [
/* more items */
],
ToAddresses: [
toAddress,
/* more To-email addresses */
],
},
Message: {
/* required */
Body: {
/* required */
Html: {
Charset: "UTF-8",
Data: htmlContent,
},
Text: {
Charset: "UTF-8",
Data: textContent,
},
},
Subject: {
Charset: "UTF-8",
Data: emailSubject,
},
},
Source: emailSenderName + '<' + fromAddress + '>',
ReplyToAddresses: [
/* more items */
],
});
};
const sendEmailCommand = createSendEmailCommand(
recipientEmailAddress,
senderEmailAddress,
htmlEmailContent,
textEmailContent,
emailSubject
);
try {
await aws_ses_client.send(sendEmailCommand);
} catch (e) {
console.error("Failed to send email.", e);
}
(此处错误)
拒绝访问:资源上的用户
arn:aws:sts::(some number):assumed-role/AmazonLightsailInstanceRole/i-(some alphanumeric number)is not authorized to performses:SendEmail' `arn:aws:ses:us-east-1:(一些数字):身份/(收件人电子邮件 地址)'在网上搜索了一下这个问题后,以为错误是由于Lightsail实例限制(https://aws.amazon.com/premiumsupport/knowledge-center/lightsail-port-25-throttle/)的25端口限制导致的,我向AWS发送限制删除请求,但请求被拒绝,告诉我“考虑寻找”进入简单电子邮件服务”。我发送了一条回复,询问是否可以在 LightSail 实例上通过 AWS SES 发送电子邮件,但收到的回复是“我们无法批准您的请求”;我觉得第二个回复要么是自动回复的,要么甚至没有被查看电子邮件的人仔细阅读过。
我在我的 LightSail 网络服务器上安装了一个多站点 WordPress,它可以使用 WP Mail SMTP 插件通过 AWS SES 发送电子邮件,使用 SMTP 端口 587 进行 TLS 加密。我认为这证明可以通过 AWS SES 在 LightSail 实例上发送电子邮件.我的 WordPress 每天都会使用我的 AWS SES SMTP 凭证在我的 LightSail 网络服务器上发送电子邮件;因此,也许必须在 LightSail 实例电子邮件发送代码中直接联系 AWS SES SMTP 服务器才能发送电子邮件,而不是在代码中使用经过身份验证的 SES 客户端对象?
我在想,也许假定的角色 AmazonLightsailInstanceRole 不允许发送 AWS SES 电子邮件。我检查了我的 AWS IAM Web 控制台,没有名为 AmazonLightsailInstanceRole 的角色;看起来我无法修改代入角色 AmazonLightsailInstanceRole 的策略。
是否可以将 AWS SES 电子邮件发送权限授予代入角色 AmazonLightsailInstanceRole?如果是这样,如何?
是否可以在 AWS LightSail 实例上通过 AWS SES 发送电子邮件?如果是这样,如何在 Node.js JavaScript AWS SDK 代码中完成?任何验证、参考和/或指示都会非常有帮助。
【问题讨论】:
标签: amazon-web-services amazon-ses amazon-lightsail