5. nodemailer를 이용한 메일 보내기

Eden·2023년 8월 1일
0

Email 인증번호 보내기 및 Welcome 메일 보내기

Email 보내는 필요한 패키지 설치

npm install nodemailer @types/nodemailer

우선 환경변수(.env 파일)에 Email 관련 정보를 입력하고
app.module에 추가된 환경변수에 대한 유효성 검사를 추가한다.

nodemailer에 사용에 필요한 modeule(email.module.ts)과 service(email.service.ts)파일을 만든다


//email.module.ts
@Module({
  import: [ConfigModule], // 환경변수를 가져와야함
  provider: [EmailService],
  exports: [EmailService], // 다른 리소스에서 사용하기 위함
})
export class EmailModule{}

//email.service.ts
import * as Mail from 'nodemailer/lib/mailer'; 
@Injectable()
export class EmailService{
  private nodemailerTransport: Mail;
  constructor(private readonly configService: ConfigService){
    this.noedemailerTransport = createTransport({ // createTransport는 Transport를 반환하는 nodemailer 라이브러리 매소드
      service: configService.get('EMAIL_SERVICE'),
      auth: { //인증정보 id/password
        user: configService.get('EMAIL_USER'),
        pass: configService.get('EMAIl_USER_PASSWORD'),
      },
    });
  }
  sendMail(options: Mail.Options){//메일을 보내는 함수
    return this.nodemailerTransport.sendMail(options); //메일을 보내는 매소드
  }
}

nodemailer에 연결할 환경변수 값 가져오는 방법은 다음과 같다
EMAIL_SERVICE : google (기준)
EMAIL_USER :
EMAIL_PASSWORD :

구글 로그인후 > 계정관리 > 보안 > 2단계 인증 > 앱 비밀번호 생성에서 user와 password를 가져올 수 있다. ( 앱 비밀번호는 생성단계에서 한번 만 확인할 수 있으며 잊어먹을경우 다시 생성해야한다.)

email관련 모듈과 서비스를 완성하면 auth리소스에 적용해준다.

//auth.module.ts 파일
imports: [ ... , EmailModule ],
providers: [ ... , EmailService ], // 각각 추가해준다

  
//auth.service.ts 파일
+
async sendEmail(email:string): Promise<boolean>{
  await this.emailService.sendEmail({
  	to : email, // 받는사람
    subject: '', //인증코드 (이메일 제목)
    text: '' //이메일 내용
  });
  return true;
}

  
//auth.controller.ts 파일
+
@Post('send/email') //이메일 보내는 api
async sendEmail(@Body('email') email:string ): Promise<boolean> {
  return await this.authService.sendEmail(email);
}
profile
주섬주섬..

0개의 댓글