Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Thư Điện Tử

Thành Thạo Gửi Email Trong NestJS: Hướng Dẫn Bước Đi Với Nodemailer

Bởi Okure U. Edet

Khi học NestJS, tôi muốn gửi email test với Nodemailer nhưng gặp khó khăn trong bối cảnh ứng dụng NestJS. Tìm kiếm giải pháp trên internet và sau nhiều nghiên cứu, tôi tìm thấy một giải pháp. Nó thực sự đơn giản.

Bài này tôi chia sẻ giải pháp để bạn dùng trong dự án NestJS.

Mục Lục

  • Cách Thiết Lập Dự Án NestJS
  • Cách Cấu Hình Nodemailer Trong App
  • Cách Gửi Email Với Nodemailer
  • Kết Luận

Cách Thiết Lập Dự Án NestJS

Lý tưởng, khi người dùng nhấn route quên mật khẩu, link nên gửi đến email người dùng, và qua link đó người dùng đặt lại mật khẩu. Bài này demo trường hợp test cách này hoạt động dùng Nodemailer.

Mở IDE yêu thích hoặc vào terminal dán lệnh sau:

$ npm i -g @nestjs/cli
$ nest new nodemailer-app

Lệnh trên tạo dự án mới tên nodemailer-app.

Sau đó, vào thư mục dự án cài gói Nodemailer, npm i --save @nestjs-modules/mailer nodemailer và types, npm i --save-dev @types/nodemailer.

Cách Cấu Hình Nodemailer Trong App

Trước khi tiếp tục, đảm bảo bạn có tài khoản mailtrap.io. Nếu có, đăng nhập vào Email Testing. Tạo inbox riêng nếu chưa có. Vào inbox bạn thấy thông tin xác thực dùng cấu hình Nodemailer trong ứng dụng.

Trong thư mục dự án, vào file app module cấu hình gói:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { MailerModule } from '@nestjs-modules/mailer';

@Module({
  imports: [
    AuthModule,
    MailerModule.forRoot({
      transport: {
        host: process.env.EMAIL_HOST,
        auth: {
          user: process.env.EMAIL_USERNAME,
          pass: process.env.EMAIL_PASSWORD,
        },
      },
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Trong mã trên, bạn import MailerModule từ @nestjs-modules/mailer. Sau đó gọi phương thức forRoot() trên nó. Bên trong forRoot(), bạn chỉ định thuộc tính transport chứa host và auth.

Đừng quên lấy host, port, username và password từ thông tin xác thực trong inbox trên mailtrap.io.

Bạn tạo file .env chứa tất cả chi tiết xác thực. Khuyên nên làm vậy. Để load file .env phù hợp trong NestJS, cài đặt:

$ npm i --save @nestjs/config

Sau đó trong app.module.ts, import ConfigModule:

import { ConfigModule } from '@nestjs/config';

Vẫn trong app.module.ts

// include the config module in your imports array
@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: '.env',
      isGlobal: true
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})

Cách Gửi Email Với Nodemailer

Sau cấu hình Nodemailer, đến lúc gửi email với nó.

Trong file app.service.ts, dán mã sau:

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

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

  sendMail() {
    const message = `Forgot your password? If you didn't forget your password, please ignore this email!`;
    this.mailService.sendMail({
      from: 'Kingsley Okure <kingsleyokgeorge@gmail.com>',
      to: 'joanna@gmail.com',
      subject: `How to Send Emails with Nodemailer`,
      text: message,
    });
  }
}

Trong app.service.ts, MailerService được inject và dùng trong class gửi email. Bên trong class, MailerService có hàm sendMail nhận object tham số. Object chứa thuộc tính from, to, subject và text.

Sau khi làm xong, trong app.controller.ts, dán mã sau:

import { Controller, Get, Res } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  sendMailer(@Res() response: any) {
    const mail = this.appService.sendMail();
    return response.status(200).json({
      message: 'success',
      mail,
    });
  }
}

Tất cả trong controller là tạo request Get gọi hàm sendMail đã tạo trong service.

Lý tưởng, trong ứng dụng thực tế, tất cả sẽ làm trong hàm quên mật khẩu. Và email gửi đến user khi họ nhấn route quên mật khẩu.

Để test thiết lập nhỏ này, mở Postman truy cập localhost:3000 và bấm send.

Sau đó vào inbox mailtrap.io xem tin nhắn.

Kết Luận

Bài này bạn học cách gửi email với Nodemailer, phần mềm thiết kế giúp nhà phát triển gửi email cho nhiều người cùng lúc.

Bạn cũng học cách cấu hình và thiết lập trong bối cảnh ứng dụng NestJS.

Nếu muốn kết nối với tôi, theo dõi Twitter hoặc LinkedIn.

Học lập trình miễn phí. Chương trình mở của freeCodeCamp đã giúp hơn 40.000 người tìm được việc làm lập trình viên. Bắt đầu ngay