Git Product home page Git Product logo

yanarp / nestjs-mailer Goto Github PK

View Code? Open in Web Editor NEW
119.0 4.0 31.0 1.19 MB

๐ŸŒˆ A simple implementation example with and without email-templates using mailer module for nest js built on top of nodemailer.

Home Page: https://github.com/nest-modules/mailer

License: MIT License

JavaScript 3.36% TypeScript 23.80% Handlebars 72.84%
nestjs nestjsmailer nodemailer smtp outlook nestjs-mailer kit sender ejs handlebars

nestjs-mailer's Introduction

Nest Logo

Demo implementation on the mailer modules for Nest framework (node.js) using Nodemailer library

Nestjs-mailer starter kit / project for your NestJs project.

Goals

The main goal of this kit is to quickly get you started on your project with Nestjs Mailer, bringing a solid layout foundation to work upon.

Usage

Import the MailerModule into the root AppModule

Synchronous import

//app.module.ts
import { Module } from '@nestjs/common';
import { MailerModule } from '@nestjs-modules/mailer';  
import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter';

@Module({
  imports: [
    MailerModule.forRoot({
      transport: {
        host: 'smtp.example.com',
        port: 587,
        secure: false, // upgrade later with STARTTLS
        auth: {
          user: "username",
          pass: "password",
        },
      },
      defaults: {
        from:'"nest-modules" <[email protected]>',
      },
      template: {
        dir: process.cwd() + '/templates/',
        adapter: new HandlebarsAdapter(), // or new PugAdapter()
        options: {
          strict: true,
        },
      },
    }),
  ],
})
export class AppModule {}

Asynchronous import

//app.module.ts
import { Module } from '@nestjs/common';
import { MailerModule } from '@nestjs-modules/mailer';  
import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter';

@Module({
  imports: [
    MailerModule.forRootAsync({
      useFactory: () => ({
        transport: {
          host: 'smtp.example.com',
          port: 587,
          secure: false, // upgrade later with STARTTLS
          auth: {
            user: "username",
            pass: "password",
          },
        },
        defaults: {
          from:'"nest-modules" <[email protected]>',
        },
        template: {
          dir: process.cwd() + '/templates/',
          adapter: new HandlebarsAdapter(), // or new PugAdapter() or new EjsAdapter()
          options: {
            strict: true,
          },
        },
      }),
    }),
  ],
})
export class AppModule {}
  • We have used Handlebars in above example, for EJS and Pug use below mentioned example of adapter import

Pug

//app.module.ts
import { Module } from '@nestjs/common';
import { MailerModule } from '@nestjs-modules/mailer';  
import { PugAdapter } from '@nestjs-modules/mailer/dist/adapters/pug.adapter';

EJS

//app.module.ts
import { Module } from '@nestjs/common';
import { MailerModule } from '@nestjs-modules/mailer';  
import { EjsAdapter } from '@nestjs-modules/mailer/dist/adapters/ejs.adapter';

After this, MailerService will be available to inject across entire project, for example in this way :

import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';

@Injectable()
export class ExampleService {
  constructor(private readonly mailerService: MailerService) {}
}

MailerProvider exports the sendMail() function to which you can pass the message options (sender, email subject, recipient, body content, etc)

sendMail() accepts the same fields as nodemailer email message

import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';

@Injectable()
export class ExampleService {
  constructor(private readonly mailerService: MailerService) {}
  
  public example(): void {
    this
      .mailerService
      .sendMail({
        to: '[email protected]', // list of receivers
        from: '[email protected]', // sender address
        subject: 'Testing Nest MailerModule โœ”', // Subject line
        text: 'welcome', // plaintext body
        html: '<b>welcome</b>', // HTML body content
      })
      .then((success) => {
        console.log(success)
      })
      .catch((err) => {
        console.log(err)
      });
  }
  
  public example2(): void {
    this
      .mailerService
      .sendMail({
        to: '[email protected]',
        from: '[email protected]',
        subject: 'Testing Nest Mailermodule with template โœ”',
        template: 'index', // The `.pug` or `.hbs` extension is appended automatically.
        context: {  // Data to be sent to template engine.
          code: 'cf1a3f828287',
          username: 'john doe',
        },
      })
       .then((success) => {
        console.log(success)
      })
      .catch((err) => {
        console.log(err)
      });
  }
  
  public example3(): void {
    this
      .mailerService
      .sendMail({
        to: '[email protected]',
        from: '[email protected]',
        subject: 'Testing Nest Mailermodule with template โœ”',
        template: '/index', // The `.pug` or `.hbs` extension is appended automatically.
        context: {  // Data to be sent to template engine.
          code: 'cf1a3f828287',
          username: 'john doe',
        },
      })
      .then((success) => {
        console.log(success)
      })
      .catch((err) => {
        console.log(err)
      });
  }
}

Make a template named folder at the root level of the project and keep all the email-templates in the that folder with .hbs extension. This implementation uses handlebars as a view-engine and outlook as the smtp.

Configuration

Dotenv module has been used for sender's email and password keep. This kit is implemented with outlook smtp, while we can make changes in the app.module.ts configurations for other services. As the nestjs-mailer is built on top of nodemailer, the required configurations can be found here Nodemailer / smtp.

Special thanks to https://github.com/leemunroe/responsive-html-email-template for providing email-templates

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.