코딩 테스트 풀이 🛠

이메일 인증번호 구현 With Next.Js & nodeMailer

엄성준 2024. 1. 30. 20:51

이전에 제로베이스에서 팀프로젝트를 구현할 때 이메일로 인증번호를 받아서 로그인하는 과정을 구현한 적이 있습니다.

이 때는 백엔드에서 이메일 인증 관련 로직을 처리해서 어떻게 구현했는지 정확히 알지 못했습니다.

 

그래서 이번 기회에 구현을 하게 되었는데 문제점이 생겼습니다.

 

처음에 SendGrid를 통해서 이메일 인증관련 로직을 처리하려고 하였으나 SendGrid에 회원가입을 하자마자 access관련 문제가 파바박 하고 터지고 구글 검색과 수많은 댓글을 통해서 알아낸 점은 SendGrid에 가입해 성공하여도 추가로 요구하는 정보도 만고 인증을 하려면 수많은 절차를 거쳐야 한다는 점을 알게 되었습니다.

 

그래서 찾아낸 다른 방법이 nodeMailer입니다.

 

먼저 nodeMailer를 사용하기 전에 저는 제 네이버 계정의 메일을 수신자 메일로 이용하였습니다.

 

이용 방법은 아래와 같습니다.

 

네이버 메일 -> 환경설정 -> POP3/IMAP 설정 -> IMAP/SMTP설정 -> IMAP/SMTP "사용함" 설정 -> IMAP 동기화 메일 제한 "1,000통 설정" -> 저장

 

 

이후 터미널을 통해 nodemailer설치

npm install --save nodemailer @types/nodemailer

 

 

email.ts 파일에 아래와 같이 코드 입력

import nodemailer from "nodemailer";

const smtpTransport = nodemailer.createTransport({
service: "Naver",
host: "smtp.naver.com",
port: 587,
auth: {
user: process.env.MAIL_ID,
pass: process.env.MAIL_PASSWORD,
},
tls: {
rejectUnauthorized: false,
},
});

export default smtpTransport;

 

이후 백엔드 API를 작성한 파일에 아래 코드 입력

if (email) {
const mailOptions = {
from: process.env.MAIL_ID,
to: email,
subject: "Nomad Carrot Authentication Email",
text: `Authentication Code : ${payload}`,
};
const result = await smtpTransport.sendMail(
mailOptions,
(error, responses) => {
if (error) {
console.log(error);
return null;
} else {
console.log(responses);
return null;
}
}
);
smtpTransport.close();
console.log(result);
}

 

위의 방법의 설명이 부족하거나 다른 정보를 참고하고 싶으신 분들은 "nodemailer 네이버 메일" 검색해 보시길 추천드립니다.