无法从VPC中将Lambda的电子邮件发送到SES

时间:2017-04-08 12:14:48

标签: lambda amazon-vpc amazon-ses

我正在尝试从Lambda向SES发送电子邮件。

当我在NO VPC模式下运行Lambda时,电子邮件已成功发送。

但是当我分配我的VPC时,它不起作用。

AWS拥有连接S3的VPC端点。它同样适用于SES?或者不可能这样做?

4 个答案:

答案 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);
        }
    });
};