How I used Amazon SES with MJML to create email templates in my side-project

How it started

I wanted to send emails to my users on

First attempt: mail sending services

Of course, I started with mail sending services like SendGrid, Mailchimp, SendInBlue. They are awesome services but I faced with various difficulties:

Another attempt: Amazon SES

For introduction, Amazon SES

As any programmer, I wanted to code this mail sending. 😀

Here is ther overview of CLI(AWS CLI must be installed and made login) commands for SES(more information can found in SES docs)

aws ses list-templates
aws ses get-template --template-name simple-template
aws ses create-template --cli-input-json file://simple-template.json
aws ses update-template --cli-input-json file://simple-template.json
aws ses send-templated-email --cli-input-json file://simple-template-single-user.json
aws ses send-bulk-templated-email --cli-input-json file://simple-template-bulk-users.json

Example of simple-template.json

"Template": {
"TemplateName": "simple-template",
"SubjectPart": "Greetings, {{name}}!",
"HtmlPart": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>",
"TextPart": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}."

Example of simple-template-single-user.json

"Source":"WeekHabit Team <>",
"Template": "mjml",
"ConfigurationSetName": "ConfigSet",
"Destination": {
"ToAddresses": [ ""
"TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"

Note: ConfigSet must be created in Amazon SES console otherwise email will not be sent.


Did you notice that HtmlPart is very simple and more suitable for system emails where style is not important.

Also Amazon SES doesn’t have template editor, so how to create responsive and stylish email?(One of many advantages of email services)

mjml — responsive template framework

The mjml is tool which allows create responsive email. It has nice editor where you can design email template.

Standard workflow for generating email template html:

./node_modules/.bin/mjml -r simple-template.mjml -o simple-template.html
aws ses update-template --cli-input-json file://simple-template.json


From personal blog: