Your resource for web content, online publishing
and the distribution of digital products.
S M T W T F S
 
 
 
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
31
 
 

This NestJS Package Turns Email Setup from Nightmare to No-Brainer

DATE POSTED:January 21, 2025

Sending emails is a critical functionality in many applications, whether for user notifications, transactional updates, or marketing purposes.

\ However, implementing email solutions can sometimes be cumbersome, as you have to integrate mailer with template language, check for dependencies…

\ But!

\ With the @nestixis/nestjs-mailer package, you can simplify this process while ensuring flexibility and reliability.

\ This package leverages the power of React and Nodemailer, making it a modern and developer-friendly tool for building dynamic email templates and sending emails effortlessly.

\ Let's dive into how you can set it up and use it :)

Installing the Package

To get started, you need to install the nestjs-mailer package in your NestJS application. This package is available via npm, making installation quick and straightforward. Run the following command in your terminal: \n

npm install @nestixis/nestjs-mailer Configuring the Module

Once the package is installed, the next step is to configure the MailerSdkModule in your application.

\ Configuration is straightforward, and for testing purposes, you can use a tool like Mailcatch to capture and preview emails without sending them to real users.

\ Here's an example of how to set it up: \n

import { MailerSdkModule } from '@nestixis/nestjs-mailer'; import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [ MailerSdkModule.register({ auth: { user: 'username', password: 'password', host: 'sandbox-smtp.mailcatch.app', port: 2525, ssl: false, }, from: '[email protected]', }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {} Creating an Email Template

To make your emails visually appealing and more dynamic, you can combine templates with React, and package@react-email/components, allows you to design such email templates.

\ **But before that, you should call the file invite-admin-with-account-template.tsx and set \n **

"jsx": "react" \n

in your tsconfig.json

\ Here's an example of a template for inviting a new admin user: \n

import { Body, Container, Head, Html, Img, Link, Section, Text, } from '@react-email/components'; import * as React from 'react'; export default function InviteAdminWithAccountTemplate({ translation, language, invitationHref, passwordHref, logoUrl, }) { return (
{logoUrl ? ( Logo ) : ( {translation.titleInside} )} {translation.contentPart1} {translation.contentPart2} {translation.contentPart3.subpart1} {translation.contentPart3.subpart2} {translation.contentPart3.subpart3} {translation.contentPart4.subpart1} {translation.contentPart4.subpart2}
); } Injecting the Email Sender

After creating your email template, the next step is to send the email. To do this, you inject the email sender into your service. \n

import { EmailSenderInterface, MAILER_SDK_CLIENT, } from '@nestixis/nestjs-mailer'; import { Inject, Injectable } from '@nestjs/common'; import InviteAdminWithAccountTemplate from './invite-admin-with-account-template'; @Injectable() export class AppService { constructor( @Inject(MAILER_SDK_CLIENT) private readonly emailSender: EmailSenderInterface, ) {} async send(): Promise { const translations = { titleInside: { subpart1: 'Welcome', subpart2: ' to the platform!' }, contentPart1: 'Hello', contentPart2: 'Your admin account has been created.', contentPart3: { subpart1: 'Click here to activate your account: ', subpart2: 'Activate', subpart3: '.', }, contentPart4: { subpart1: 'To set your password, click here: ', subpart2: 'Set password', }, }; const emailContent = await InviteAdminWithAccountTemplate({ translation: translations, language: 'en', invitationHref: 'xxx', passwordHref: 'xxx', logoUrl: 'logo.png', }); await this.emailSender.sendEmail( '[email protected]', 'Admin Invitation', emailContent, ); } } Done!

Image description

That's it! You've successfully integrated nestjs-mailer into your application.

\ For more details and advanced features, check out the NestJS mailer GitHub repository.