0.2.0 • Published 1 year ago

nestjs-nodemailer-mjml v0.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

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:password@smtp.example.com',
      mjmlPluginOptions: {
        templateFolder: join(__dirname, 'assets/emailTemplates'),
      },
      defaults: {
        from: '"John Smith" <john.smith@example.com>',
        templateData: {
          applicationName: 'Example App',
          copyright: `Acme Co, ${new Date().getFullYear()}`,
        },
      },
    }),
  ],
})
export class AppModule {}

!TIP You can configure transport, mjmlPluginOptions and provide your own defaults. For configuration of transport and mjmlPluginOptions please refer to Nodemailer and Nodemailer-mjml documentation repectively. The defaults 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" <john.smith@example.com>',
          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: 'joe.bloggs@example.com',
      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. The templateData.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

0.2.0

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago