본문 바로가기
backend/NestJS

[NestJS]NestJS에서 메일 보내기

by BK0625 2023. 3. 22.
반응형

사이드 프로젝트를 진행하던 도중 메일을 보내야 하는 상황이 생겼다.

복잡한 메일은 아니고 간단한 데이터 몇 개를 메일로 보내야 되는 상황이였는데 NestJS에서 메일 보내는 방법을 알아보자

 

npm install --save @nestjs-modules/mailer nodemailer

 

먼저  npm install --save @nestjs-modules/mailer nodemailer 명령어를 사용해 관련 라이브러리를 설치한다. 공식 홈페이지에서는 여기서 template를 사용하려면 pug나 ejs 같은 걸 설치하라고 하는데 난 사용 안할거니까 패스.

 

 

 

MailerModule.forRootAsync({
    useFactory: () => ({
        transport: {
            host: 'smtp.naver.com',
            port: 465,
            auth: {
                user: process.env.EMAIL_ID,
                pass: process.env.EMAIL_PW
            },
        },
        defaults: {
            from: '"no-reply" <email address>',
        },
        preview: true,

    })
}),

 

그 다음엔 해당 파일을 app.module.ts 파일에 import 해준다. 일단 저렇게 메일을 보내기 위해선 해당 메일 서비스에(네이버 메일이든 구글 메일이든) smtp 인증 허용을 해줘야 한다. 네이버 같은 경우에는 메일 서비스로 들어가 인증 받을 수 있다. 가운데 auth 부분에는 .env 파일에 해당 파일을 보내는 계정의 이메일과 비밀번호를 입력해 환경변수로 불러왔다.

 

 

 

@Injectable()
export class WordService {
    private readonly logger = new Logger(WordService.name);
    constructor(
        private readonly enWordRepository : EnWordRepository,
        private readonly jwtService : JwtService,
        private dataSource : DataSource,
        private readonly mailerService : MailerService,
    ){}

 

그 다음 메일서비스를 하고 싶은 service 파일에

private readonly mailerService : MailerService,

을 넣어준다.

 

 

이제 테스트 함수를 작성해보자

 

 public example(): void {
        this.mailerService
          .sendMail({
            to: 'rtw2343@naver.com', // list of receivers
            from: process.env.EMAIL_ID, // sender address
            subject: 'Testing Nest MailerModule ✔', // Subject line
            text: 'welcome', // plaintext body
            html: '<b>welcome</b>', // HTML body content
          })
          .then(() => {})
          .catch(() => {});
      }

 

html 안에 코드를 바꿔서 내용을 바꿀 수 있다.

 

    @Get('/testMail')
    async testMail(){
        await this.wordService.example();
    }

 

 

컨트롤러에서 해당 service의 함수를 호출하면

 

TalendAPI Tester를 사용해 테스트!

 

 

메일이 잘 왔다

 

 

메일이 잘 온 것을 확인 할 수 있다.

 

스프링으로 할 땐 꽤 오래걸렸던거 같은데...

 

참조

https://nest-modules.github.io/mailer/docs/mailer.html

 

NestJS - Mailer · Modules for the nestjs framework

Modules for the nestjs framework

nest-modules.github.io

 

반응형