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