nestjs-nodemailer-mjml
v0.2.0
Published
Nestjs module wrapper for nodemailer-mjml
Downloads
5
Readme
Installation
npm install nestjs-nodemailer-mjml
# or using yarn add nestjs-nodemailer-mjml
Configuration
// app.module.ts
import { Module } from '@nestjs/common';
import { MailerModule } from 'nestjs-nodemailer-mjml';
import { join } from 'path';
@Module({
imports: [
MailerModule.forRoot({
transport: 'smtps://username:[email protected]',
mjmlPluginOptions: {
templateFolder: join(__dirname, 'assets/emailTemplates'),
},
defaults: {
from: '"John Smith" <[email protected]>',
templateData: {
applicationName: 'Example App',
copyright: `Acme Co, ${new Date().getFullYear()}`,
},
},
}),
],
})
export class AppModule {}
[!TIP] You can configure
transport
,mjmlPluginOptions
and provide your owndefaults
. For configuration oftransport
andmjmlPluginOptions
please refer to Nodemailer and Nodemailer-mjml documentation repectively. Thedefaults
property allows you to provide default options and template variables.
Async Configuration
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { MailerModule } from 'nestjs-nodemailer-mjml';
import { join } from 'path';
import mailerConfig from './mailer.config';
@Module({
imports: [
ConfigModule.forFeature(mailerConfig),
MailerModule.forRootAsync({
imports: [ConfigModule],
useFactory: () => ({
transport: configService.get('mailer.transport'),
mjmlPluginOptions: {
templateFolder: join(
__dirname,
configService.get('mailer.templateFolder')
),
},
defaults: {
from: '"John Smith" <[email protected]>',
templateData: {
applicationName: 'Example App',
copyright: `Acme Co, ${new Date().getFullYear()}`,
},
},
}),
}),
],
inject: [ConfigService],
})
export class AppModule {}
[!TIP] For more information on use of
@nestjs/config
, please refer to NestJS config documentation.
Example Usage
import { Injectable } from '@nestjs/common';
import { MailerModule } from 'nestjs-nodemailer-mjml';
@Injectable()
export class ExampleService {
constructor(private readonly mailerService: MailerService) {}
async sendExample() {
this.mailerService.sendMail({
to: '[email protected]',
subject: 'Testing nestjs-nodemailer-mjml',
templateName: 'mytemplate',
templateData: {
applicationName: 'Overridden Name',
emailTitle: 'My Email Title',
someText: 'Lorem ipsum dolor sit amet, consectetur...',
},
});
}
}
[!NOTE] Options provided to
sendMail()
override defaults provided at configuration. ThetemplateData.applicationName
property demonstrates an overridden value in the example context.
This example assumes that a template file called mytemplate.mjml
exists in the configured templateFolder
. Please ensure that your build process is deploying the assets as desired.
Useful Resources
- MJML - MJML framework documentation
- Easy Email Pro - Demo editor