1.0.3 • Published 4 months ago

@tresdoce-nestjs-toolkit/mailer v1.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Este módulo está pensado para ser utilizado en NestJS Starter, o cualquier proyecto que utilice una configuración centralizada, siguiendo la misma arquitectura del starter.

Glosario


📝 Requerimientos básicos

🛠️ Instalar dependencia

npm install -S @tresdoce-nestjs-toolkit/mailer
yarn add @tresdoce-nestjs-toolkit/mailer

⚙️ Configuración

Agregar los datos de conexión SMTP en configuration.ts utilizando el key mailer que contenga los datos desde las variables de entorno.

//./src/config/configuration.ts
import { Typings } from '@tresdoce-nestjs-toolkit/core';
import { registerAs } from '@nestjs/config';

export default registerAs('config', (): Typings.AppConfig => {
  return {
    //...
    mailer: {
      transport: {
        host: process.env.EMAIL_HOST,
        port: parseInt(process.env.EMAIL_PORT, 10) || 587,
        secure: true,
        requireTLS: true,
        auth: {
          user: process.env.EMAIL_USER,
          pass: process.env.EMAIL_PASSWORD,
        },
      },
      defaults: {
        from: process.env.EMAIL_USER,
      },
    },
    //...
  };
});

👨‍💻 Uso

Importar el MailerModule en el archivo app.module.ts, y el módulo se encargará de obtener la configuración y realizar la connexion automáticamente.

//./src/app.module.ts
import { MailerModule } from '@tresdoce-nestjs-toolkit/mailer';

@Module({
  //...
  imports: [
    //...
    MailerModule,
    //...
  ],
  //...
})
export class AppModule {}

Inyectar el MailerService para poder realizar el envío de mails.

//./src/app.service.ts
import { MailerService } from '@tresdoce-nestjs-toolkit/mailer';

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

  async sendMail() {
    try {
      return await this.mailerService.sendMail({
        to: 'to <to@email.com>',
        from: 'from <from@email.com>',
        subject: 'Subject of mail',
        text: 'this is a plain text',
        html: '<b>this is a html email</b>',
      });
    } catch (error) {
      throw new Error(error.message);
    }
  }
}

Template (ejs, pug o handlebars)

Para poder trabajar con templates de email, hay que agregarle la configuración templates en el configuration.ts y especificar que adaptador vas a utilizar y la ruta de donde se encuentran los templates.

//./src/config/configuration.ts
import { Typings } from '@tresdoce-nestjs-toolkit/core';
import { registerAs } from '@nestjs/config';
import { HandlebarsAdapter } from '@tresdoce-nestjs-toolkit/mailer';

export default registerAs('config', (): Typings.AppConfig => {
  return {
    //...
    mailer: {
      transport: {
        host: process.env.EMAIL_HOST,
        port: parseInt(process.env.EMAIL_PORT, 10) || 587,
        secure: true,
        requireTLS: true,
        auth: {
          user: process.env.EMAIL_USER,
          pass: process.env.EMAIL_PASSWORD,
        },
      },
      defaults: {
        from: process.env.EMAIL_USER,
      },
      template: {
        dir: join(__dirname, './templates'),
        adapter: new HandlebarsAdapter(),
        options: {
          strict: true,
        },
      },
    },
    //...
  };
});

Envío de mail con template

//./src/app.service.ts
import { MailerService } from '@tresdoce-nestjs-toolkit/mailer';

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

  async sendMail(email: string, name: string) {
    try {
      return await this.mailerService.sendMail({
        to: email,
        from: 'from <from@email.com>',
        subject: 'Greeting from NestJS NodeMailer',
        template: './email',
        context: {
          name: name,
        },
      });
    } catch (error) {
      throw new Error(error.message);
    }
  }
}

Email template

//templates/email.hbs
<p>Hi {{name}},</p>
<p>Hello from NestJS NodeMailer</p>

📄 Changelog

Todos los cambios notables de este paquete se documentarán en el archivo Changelog.


1.0.3

4 months ago

1.0.2

7 months ago

1.0.1

8 months ago

1.0.0

9 months ago

1.0.0-beta.2

9 months ago

1.0.1-beta.1

8 months ago

1.0.2-beta.0

7 months ago

1.0.1-beta.0

8 months ago

1.0.0-beta.0

9 months ago

1.0.0-beta.1

9 months ago

0.3.3-beta.1

10 months ago

0.3.2-beta.1

10 months ago

0.3.4-beta.0

9 months ago

0.3.2-beta.0

10 months ago

0.3.3-beta.0

10 months ago

0.3.2

10 months ago

0.3.3

10 months ago

0.3.2-beta.2

10 months ago

0.3.0-beta.2

12 months ago

0.3.0-beta.3

12 months ago

0.3.0

12 months ago

0.3.0-beta.0

12 months ago

0.3.0-beta.1

12 months ago

0.3.0-beta.4

12 months ago

0.3.1

11 months ago

0.2.1-beta.0

1 year ago

0.2.1

1 year ago

0.2.0-beta.0

1 year ago

0.2.0

1 year ago

0.1.5-beta.0

1 year ago

0.1.7-beta.0

1 year ago

0.1.7

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.2-beta.0

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.1.0-beta.2

2 years ago

0.1.0-beta.1

2 years ago

0.1.0-beta.0

2 years ago