[Nest] Nest WikiDocs (4.8)

ShinJuYong·2022년 4월 11일
0

Nest

목록 보기
3/13
post-thumbnail

회원가입 이메일 발송 서비스

무료로 이메일을 전송해주는 라이브러리

상용 서비스에는 사용 금지

yarn add nodemailer
yarn add @types/nodemailer --dev

UserService는 유저의 정보를 저장,조회하는 역할을 위주로 하기때문에 Mail을 담당하는 EmailService를 만들어 비즈니스 로직을 처리한다.

nest g s Email

그후 UserServiceEmailService를 주입한다.

constructor(private emailService: EmailService) {}

이메일서비스

import { Injectable } from '@nestjs/common';
import Mail from 'nodemailer/lib/mailer';
import * as nodemailer from 'nodemailer';

// 메일 옵션타입을 지정한 TS 인터페이스
interface EmailOptions {
  to: string; // 수신자
  subject: string; // 메일제목
  html: string; // html형태의 메일 본문
}

@Injectable()
export class EmailService {
  // nodemailer에서 제공하는 transporter 객체를 생성한다
  private transporter: Mail;

  // 생성자
  constructor() {
    this.transporter = nodemailer.createTransport({
      service: 'Gmail',
      auth: {
        user: 'sea71511@gmail.com',
        pass: 'tlswndyd123!S',
      },
    });
  }

  async sendMemberJoinVerification(
    emailAddress: string,
    signupVerifyToken: string,
  ) {
    // 유저가 누를 버튼을 만든다.
    const baseUrl = 'http://localhost:3000';
    const url = `${baseUrl}/users/email-verify?signupVerifyToken=${signupVerifyToken}`;

    // 메일내용을 넣는다.
    const mailOptions: EmailOptions = {
      to: emailAddress,
      subject: '가입 인증 메일',
      html: `
            가입확인 버튼을 누르면 가입인증이 완료됩니다.<br />
            <form action="${url}" method="POST">
                <button>가입확인</button>
            </form>
        `,
    };

    return await this.transporter.sendMail(mailOptions);
  }
}

0개의 댓글