我正在尝试从Lambda向SES发送电子邮件。
当我在NO VPC模式下运行Lambda时,电子邮件已成功发送。
但是当我分配我的VPC时,它不起作用。
AWS拥有连接S3的VPC端点。它同样适用于SES?或者不可能这样做?
答案 0 :(得分:2)
VPC Endpoint 仅可用于目前,有计划将其推广到已在飞行中但尚未提供的其他服务。
提到你的lambda附带的VPC必须有一条到互联网的路由才能连接到SES,安全组还必须允许流量进入安全的SMTP端口。
答案 1 :(得分:0)
似乎Lambda没有互联网访问权限。我确认Lambda子网与具有到因特网路由的路由表相关联(SES端点在公共因特网上) - 0.0.0.0应指向NAT网关(或等效于到达网关的出站路由)因特网)。
答案 2 :(得分:0)
在类似情况下,对我来说最简单的解决方案是使用SNS调用不在VPC内的另一个Lambda来调用SES服务。 您可以为SNS创建端点并将其连接到VPC。
答案 3 :(得分:0)
现在通过创建SES的VPC端点在possible进行操作(对于安全组部分,只需启用所有流量,而源是lambda所属的安全组)。
但是,据我所知,您不能使用SES API发送邮件,您必须使用SMTP。我将lambda设置如下:
"use strict";
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
host: "email-smtp.YOURREGION.amazonaws.com",
port: 465,
secure: true,
auth: {
user: process.env.USER,
pass: process.env.PASS,
},
});
const SENDER = 'no-reply@domain.com';
const RECEIVER = 'to@domain.com';
const response = {
"statusCode": 200,
"headers": { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'},
"body": "{\"result\": \"Success.\"}"
};
const errResponse = {
"statusCode": 500,
"headers": {'Access-Control-Allow-Origin': '*'},
"body": "{\"result\": \"Failed.\"}"
};
exports.handler = function (event, context, callback) {
transporter.sendMail({
from: SENDER,
to: RECEIVER,
subject: "Hello ✔",
text: "Hello world?", // plain text body
html: "<b>Hello world?</b>", // html body
}, function(error, info) {
if (error) {
console.log(error);
callback(null, error);
} else {
console.log('Email sent: ' + info);
callback(null, info);
}
});
};