'How can I send multiple emails (around 100) with different email body using amazon ses in NodeJS?

I am trying to send emails to multiple users with email body like

dear {{username}},
/.
....
Your email is {{email}}
...
.
/

how can I do those any ideas, I saw the custom templates for amazon ses but I have 100+ users so how will it be done ?



Solution 1:[1]

You can use SES bulk templated emails.

  1. Create a template for your emails.

const AWS = require("aws-sdk");

const ses = new AWS.SES({
    accessKeyId: <<YOUR_ACCESS_KEY>>,
    secretAccessKey: <<YOUR_ACCESS_KEY>>,
    region: <<YOUR_ACCESS_KEY>>
  }); 

const params = {
  Template: {
    TemplateName: "MyTemplate",
    SubjectPart: "Test mail for {{username}}!",
    HtmlPart: "<p>Dear {{username}}</p>, <p>Your email is {{email}}.</p>"
  }
}

ses.createTemplate(params, (err, data) =>  {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
  1. Once it is done you would see the MyTemplate under Email templates of SES console. We no longer needed template creating part of the code.

  2. Now we can send the email using the following.

const users = [{username:"max", email: "[email protected]"},{username: "mosh", email:"[email protected]"}] // sample array of users

let destinations = []

for (const user of users) {
    destinations.push({
       Destination: {
         ToAddresses: [user.email]
       },
        ReplacementTemplateData: JSON.stringify({
          username: user.username,  // This will provide the value for username in template
          email: user.email // This will provide the value for email in template
        })
     });
}           

const params = {
   Source: "[email protected]", // sender email
   Template: "MyTemplate", // Template name we have created
   Destinations: destinations, 
   DefaultTemplateData: JSON.stringify({
      username: '', // default value for username
      email: '' // default value for email
   })
}

ses.sendBulkTemplatedEmail(params, (err, data) =>  {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Make sure you have given the ses:createTemplate and ses:sendBulkTemplatedEmail permissions for the IAM user before running this.

For more info see here.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kanchana