vDrews
vDrews

Reputation: 175

AWS SES send email lambda not sending every time

I want to send emails using the ses from aws from lambda. The problem is that the email is only sent some times using the same code. We don't get errors.

Here's the code:

const AWS = require('aws-sdk');
var ses = new AWS.SES();

exports.handler = async (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;

    await new Promise((resolve, reject) => {

      var params = {
        Destination: {
            ToAddresses: [myEmail]
        },
        Message: {
            Body: {
                Text: { Data: "Test"

                }

            },

            Subject: { Data: "Test Email"

            }
        },
        Source: "sourceMail"
    };

    ses.sendEmail(params, function (err, data) {

        if (err) {
            console.log(err);
            context.fail(err);
        } else {
            console.log(data);
            context.succeed(event);
        }
     callback(null, {err: err, data: data});
    });

    });
}

Upvotes: 2

Views: 3052

Answers (1)

Erez
Erez

Reputation: 1750

I would be careful with using callbackWaitsForEmptyEventLoop as it can lead to unexpected results (If this is false, any outstanding events continue to run during the next invocation.).

Can you try using this simplified version:

const AWS = require('aws-sdk');
var ses = new AWS.SES();

exports.handler = async (event, context, callback) => {
  const params = {
    Destination: {
      ToAddresses: [myEmail],
    },
    Message: {
      Body: {
        Text: { Data: 'Test' },
      },

      Subject: { Data: 'Test Email' },
    },
    Source: 'sourceMail',
  };

  await ses.sendEmail(params).promise();

  return event;
};

Upvotes: 7

Related Questions