[NestJs] NestJs에서 메일을 보내고 싶다면!

정도영·2024년 1월 22일
0
post-thumbnail

상황

사용자들이 우리 서비스를 예약을 하면 예약 확인과 관련된 내용들이 메일로 되어야한다!
물론 DB의 데이터들을 직접 조회해서 작성 후, 보낼 수도 있겠지만 메일을 간편하게 보낼 수 있는 라이브러리가 있어서 도입해보았다.

코드

yarn add nodemailer
yarn add @types/nodemailer (Typescript를 사용하는 경우)

라이브러리를 설치하고,

import * as nodemailer from 'nodemailer';

@Injectable()
export class ReservationService {
  ... 
  
   async sendReservationConfirmationEmail(
    email: string,
  ) {
    // Nodemailer transporter 생성
    const transporter = nodemailer.createTransport({
      service: process.env.email_service,
      auth: {
        user: process.env.user,
        pass: process.env.pass,
      },
    });

    // 이메일 본문 작성
    const emailBody = `
      <h1>Thank you for your reservation!</h1>
     
      <p>If you have any questions, feel free to contact us.</p>
    `;

    // 이메일 전송
    await transporter.sendMail({
      from: process.env.user,
      to: email,
      subject: 'Reservation Confirmation',
      html: emailBody,
    });
  }

위와 같이 보낼 수 있다!
service, user, pass 변수들은 github에 노출시키지 않기 위해서 환경변수로 작성하였다.

(여기서 pass는 2단계 인증이 되어있다면, 비밀번호가 아니라 메일 서비스를 위해 새로 발급해야한다! 이건 글 하단에 작성하겠다)

  • to: 메일을 받을 이메일 주소

사용자가 메일을 받기 위해서 입력한 주소(to)로 sendMail 함수를 보면, 나와 같은 경우에는 html의 옵션으로 적은 항목들이 전송된다. (option을 html -> text로 바꿔서 보내면 text에 적은 내용들이 전송된다.)


이렇게 잘 온 것을 확인할 수 있었다!

비밀번호 발급

  1. 구글 계정의 보안으로 들어간다.

  2. 2단계 인증을 한 후, 페이지 하단의 앱 비밀번호로 들어간다.

  3. 앱 이름을 작성하면, 비밀번호가 나오게 되는데, 복사해서 pass 변수에 넣어서 사용하면 끝!

profile
대한민국 최고 개발자가 될거야!

0개의 댓글