Send templated transactional emails using Amazon SES from BPMN processes in Zeebe.io.
Watch me code this project from scratch live on YouTube:
A common task in any modern business is to send a transactional email: a welcome email, a password reset email, a receipt.
This task worker services tasks of type email:send
. The task should have a custom header with a key email:template
with the name of the template to use. The template is used to generate plain-text and HTML email bodies with the variables from the job bound. The compiled email is then sent to the recipient using AWS SES.
The worker fetches email
, firstName
, and lastName
variables from the broker.
This worker is not intended to be used as-is, as a drop-in task worker, but rather as a POC to give you an idea on how to code something like this up for your system. Making a general-purpose, reusable service takes a lot of work, and requires a lot of abstract configuration. For example: should it support Mailgun? Sendgrid? What templating variables should it support and how should it support them?
You can use this as a starter for your own transactional mail microservice, and structure it to fit your use-case.
- Start a local Zeebe broker using the zeebe-docker-compose docker images (or set the environment variable ZEEBE_ADDRESS to point to your existing broker, or set the variables to connect to Camunda Cloud).
- Clone this repo.
- Run
npm i && npm i -g pino-pretty
to install deps. - Get your AWS SES credentials (Google it).
- Put them in the environment:
export ZEEBE_TXES_FROM_EMAIL=<your authorised sending address>
export ZEEBE_TXES_AWS_SES_KEY=<AWS SES credential key>
export ZEEBE_TXES_AWS_SES_SECRET=<AWS SES credential secret>
- Start the microservice:
npm run start:dev | pino-pretty
- Open the url http://localhost:3000/[email protected]/yourFirstName/yourLastName
(Obviously substituting the values in the URL).
You should receive a welcome email in your inbox from the microservice.
Watch the videos for more insight, or just read the code. Or why not both?
Packages used in this POC:
- @payk/nestjs-zeebe - A zeebe transport and client for NestJS.
- @payk/nestjs-winston - Winston for NestJS has never been this easy!
- micromustache - A secure, fast and lightweight template engine with some handy additions.
- mailgen - A Node.js package that generates clean, responsive HTML e-mails for sending transactional mail.
- node-ses - A simple and reliable Node.js mail for sending mail through Amazon SES.
A progressive Node.js framework for building efficient and scalable server-side applications, heavily inspired by Angular.
Nest framework TypeScript starter repository.
$ npm install
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
Nest is MIT licensed.