Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> อีเมล

เชี่ยวชาญการส่งอีเมลใน NestJS: คู่มือขั้นตอนกับ Nodemailer

โดย Okure U. Edet

ขณะเรียน NestJS ผมอยากส่งอีเมลทดสอบด้วย Nodemailer แต่ทำได้ยากในบริบทของแอปพลิเคชัน NestJS ค้นหาในอินเทอร์เน็ตหาวิธีแก้ และหลังค้นคว้าหลายที่ พบวิธีหนึ่ง มันง่ายมากจริงๆ

ในบทความนี้ ผมจะแชร์วิธีแก้ปัญหาเพื่อนำไปใช้ในโปรเจกต์ NestJS ของคุณ

สารบัญ

  • วิธีตั้งค่าโปรเจกต์ NestJS
  • วิธีตั้งค่า Nodemailer ในแอป
  • วิธีส่งอีเมลด้วย Nodemailer
  • สรุป

วิธีตั้งค่าโปรเจกต์ NestJS

ในทาง lý tưởng เมื่อผู้ใช้คลิกเส้นทาง Forget Password ควรส่งลิงก์ไปยังอีเมลของผู้ใช้ และผ่านลิงก์นั้น ผู้ใช้ควรสามารถรีเซ็ตรหัสผ่านได้ บทความนี้จะสาธิต Test Case Scenario ว่ามันทำงานอย่างไรด้วย Nodemailer

เปิด IDE โปรด หรือไปที่ Terminal และวางคำสั่งต่อไปนี้:

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

คำสั่งข้างต้นสร้างโปรเจกต์ใหม่ชื่อ nodemailer-app

หลังจากนั้น ไปที่โฟลเดอร์โปรเจกต์ และติดตั้งแพ็กเกจ Nodemailer: npm i --save @nestjs-modules/mailer nodemailer และ Types: npm i --save-dev @types/nodemailer

วิธีตั้งค่า Nodemailer ในแอปของคุณ

ก่อนไปต่อ ตรวจสอบให้แน่ใจว่ามีบัญชีที่ mailtrap.io ถ้ามีแค่ Login และไปที่ Email Testing สร้าง Inbox ของตัวเองถ้ายังไม่มี ไปที่ Inbox ควรเห็น Credentials ที่จะใช้ตั้งค่า Nodemailer ในแอปพลิเคชัน

ในไดเรกทอรีโปรเจกต์ ไปที่ไฟล์ App Module และตั้งค่าแพ็กเกจ:

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 {}

ในโค้ดข้างต้น คุณ Import MailerModule จาก @nestjs-modules/mailer แล้วเรียก Method forRoot() ภายใน forRoot() ระบุ Property Transport ซึ่งประกอบด้วย Host และ Auth Properties

อย่าลืมดึง Host, Port, Username และ Password จาก Credentials ใน Inbox ของคุณบน mailtrap.io

คุณสามารถสร้างไฟล์ .env เพื่อเก็บ Credential Details ทั้งหมด แนะนำให้ทำเช่นนี้ เพื่อโหลดไฟล์ .env ที่เหมาะสมใน NestJS ติดตั้ง:

$ npm i --save @nestjs/config

แล้วในไฟล์ app.module.ts Import ConfigModule:

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

ยังคงอยู่ใน app.module.ts

// ใส่ Config Module ใน Imports Array
@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: '.env',
      isGlobal: true
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})

วิธีส่งอีเมลด้วย Nodemailer

หลังตั้งค่า Nodemailer แล้ว ถึงเวลาส่งอีเมลด้วยมัน

ในไฟล์ app.service.ts วางโค้ดต่อไปนี้:

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,
    });
  }
}

ในไฟล์ app.service.ts MailerService ถูก Inject และใช้ใน Class เพื่อส่งอีเมล ภายใน Class MailerService มีฟังก์ชัน sendMail ซึ่งรับ Object เป็น Parameter Object ประกอบด้วย Property from, to, subject และ text

เมื่อทำเสร็จแล้ว ในไฟล์ app.controller.ts วางโค้ดต่อไปนี้:

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,
    });
  }
}

Controller ทำเพียงสร้าง Get Request ซึ่งจะเรียกฟังก์ชัน sendMail ที่สร้างใน Service

ในแอปพลิเคชันจริง ทุกอย่างนี้จะทำในฟังก์ชัน Forgot Password และอีเมลจะส่งไปยังผู้ใช้เมื่อพวกเขาคลิกเส้นทาง Forgot Password

เพื่อทดสอบ Setup เล็กๆ นี้ เปิด Postman ไปที่ localhost:3000 และกด Send

จากนั้นไปที่ Inbox ของคุณบน mailtrap.io และดูข้อความ

สรุป

ในบทความนี้ คุณได้เรียนรู้วิธีส่งอีเมลด้วย Nodemailer ซอฟต์แวร์ที่ออกแบบมาเพื่อช่วยให้นักพัฒนาส่งอีเมลให้หลายคนพร้อมกัน

คุณยังเรียนรู้วิธีตั้งค่าและ Setup ในบริบทของแอปพลิเคชัน NestJS

หากอยากติดต่อผม ติดตามได้ที่ Twitter หรือ LinkedIn

Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. Get started