1
votes

After correctly creating a REST API trigger through API gateway and linking it with a lambda function, I am trying to add SES as the destination. The purpose of the function would be to automatically forward messages received on a HTML contact form on a static website to an email address through SES service. As per the caption I have created a lambda function I will show here below (just hid the domain and the email addresses for privacy).

var AWS = require('aws-sdk');
var ses = new AWS.SES();
 
var RECEIVER = '[email protected]';
var SENDER = '[email protected]';

var response = {
 "isBase64Encoded": false,
 "headers": { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': 'XXX.com'},
 "statusCode": 200,
 "body": "{\"result\": \"Success.\"}"
 };

exports.handler = function (event, context) {
    console.log('Received event:', event);
    sendEmail(event, function (err, data) {
        context.done(err, null);
    });
};
 
function sendEmail (event, done) {
    var params = {
        Destination: {
            ToAddresses: [
                RECEIVER
            ]
        },
        Message: {
            Body: {
                Text: {
                    Data: 'name: ' + event.name + '\nphone: ' + event.phone + '\nemail: ' + event.email + '\ndesc: ' + event.desc,
                    Charset: 'UTF-8'
                }
            },
            Subject: {
                Data: 'Website Referral Form: ' + event.name,
                Charset: 'UTF-8'
            }
        },
        Source: SENDER
    };
    ses.sendEmail(params, done);
}

The relevant permissions to SES have been granted to the lambda function.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ses:SendEmail",
            "Resource": "*"
        }
    ]
}

The testing of the function is indicated below:


Response null

Function Logs START RequestId: 765f6d27-9810-4d6c-a01b-a883eb429cd8 Version: $LATEST 2021-03-03T15:39:05.849Z 765f6d27-9810-4d6c-a01b-a883eb429cd8 INFO Received event: { key1: 'value1', key2: 'value2', key3: 'value3' } END RequestId: 765f6d27-9810-4d6c-a01b-a883eb429cd8 REPORT RequestId: 765f6d27-9810-4d6c-a01b-a883eb429cd8 Duration: 928.32 ms Billed Duration: 929 ms Memory Size: 128 MB Max Memory Used: 87 MB Init Duration: 449.71 ms

Request ID 765f6d27-9810-4d6c-a01b-a883eb429cd8


Unfortunately, when I click on add destinations I cannot find the SES service to be selected. The email address has already been validated in SES. What else am I missing? Thank you

1

1 Answers

1
votes

SES isn't a supported destination. Lambda destinations are for sending the output of a Lambda function to another service, without writing code in the function for connecting directly to the service.

You don't need Lambda to send anything to an SES destination because you already sent the request directly in your code via ses.sendEmail().