This content originally appeared on HackerNoon and was authored by Kamil Fronczak
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: 'your-email@example.com',
}),
],
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 (
<Html lang={language}>
<Head>
<style>{/* Your custom styles here */}</style>
</Head>
<Body style={{ fontFamily: 'Arial, sans-serif' }}>
<Section>
<Container>
{logoUrl ? (
<Img src={logoUrl} alt="Logo" />
) : (
<Text>{translation.titleInside}</Text>
)}
<Text>{translation.contentPart1}</Text>
<Text>{translation.contentPart2}</Text>
<Text>
{translation.contentPart3.subpart1}
<Link href={invitationHref}>
{translation.contentPart3.subpart2}
</Link>
{translation.contentPart3.subpart3}
</Text>
<Text>
{translation.contentPart4.subpart1}
<Link href={passwordHref}>
{translation.contentPart4.subpart2}
</Link>
</Text>
</Container>
</Section>
</Body>
</Html>
);
}
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<void> {
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(
'test@test.com',
'Admin Invitation',
emailContent,
);
}
}
Done!
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.
This content originally appeared on HackerNoon and was authored by Kamil Fronczak

Kamil Fronczak | Sciencx (2025-01-21T19:00:22+00:00) This NestJS Package Turns Email Setup from Nightmare to No-Brainer. Retrieved from https://www.scien.cx/2025/01/21/this-nestjs-package-turns-email-setup-from-nightmare-to-no-brainer/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.