Live Coding #1 mail subscription service in nodejs with fastifyjs and markojs as frontend framework.
Intro
In this article, I will show how to create a mailer service using mailjet and add it to an existing fastify project. This is part 1 of a multipart series where I will live-code a subscription feature for the existing blog.
Mailjet configuration
Step 1
Create API_KEY
and the SECRET_KEY
in Mailjet->
API Key Management.
Export them in environment variables.
export MAILJET_API_KEY="c***************************3ecd"
export MAILJET_SECRET_KEY="8******************************6"
Step 2
Install the node-mailjet
library. In this tutorial I am using the version ^6.0
npm istall node-mailjet --save
Create a fastify plugin
// mailjet.js
'use strict';
const fp = require('fastify-plugin');
const Mailjet = require('node-mailjet');
module.exports = fp(async function (fastify) {
const mailerClient = new Mailjet({
apiKey: process.env.MAILJET_API_KEY,
apiSecret: process.env.MAILJET_SECRET_KEY,
}).post('send', { version: 'v3.1' });
fastify.decorate('mailerClient', mailerClient);
});
Usage in a fastify route
module.exports = async function (fastify) {
const { mailerClient } = fastify;
const { badRequest } = fastify.httpErrors;
fastify.post("/send-mail", async (request) => {
try {
const message = {
Messages: [
{
From: {
Email: "your@mail.com",
Name: "John Doe",
},
To: [
{
Email: "katy@shield.com",
Name: "Katy Shield"
},
],
Subject: "Some subject",
TextPart: "Some text",
HTMLPart: "<h3>Some email</h3>",
CustomID: "AppGettingStartedTest",
},
],
};
await mailerClient.request(message);
} catch (err) {
throw badRequest();
}
});
};
This will be the minimum code needed to create a fastify plugin using the node-mailjet
.
I went a different route during the live coding session to have a cleaner code. If you are interested in my approach, follow the youtube session.
I hope that this article was helpful. If you like it, please share it with your friends and leave a comment; I will gladly answer all the questions.