학교 이메일 인증 구현 - haggyo imeil injeung guhyeon

nodemailer

Node.js에서 사용하는 이메일 전송 라이브러리이다. 이번 문서에서는 이메일로 인증코드를 보내 클라이언트에서 해당 인증 코드를 입력하면 회원가입이 계속해서 진행되는 예제를 다룬다.

구현과정

  1. 기본 셋업
  2. 구현

1. 기본 셋업

먼저 nodemailer 라이브러리와 dotenv, ejs를 설치해준다.

dotenv는 node 프로젝트에서 전역적으로 사용되는 변수를 정의할 수 있는 라이브러리이다. 여기에는 보통 중요 정보(비밀번호, 키값) 등이 저장되어 깃허브에서 추적하지 않게 .gitignore에 등록해야 한다. 그리고 ejs는 이메일로 전송될 내용이 담겨있다.

npm install dotenv nodemailer ejs

그리고 메일을 전송하는데에 사용할 계정에 대한 정보를 수정한다. 이번 문서에서는 gmail을 이용하여 전송할 것이다.

gmail->계정관리->보안->보안수준이 낮은 앱의 엑세스를 허용한다.

2. 구현

프로젝트 기본 폴더에 .env 폴더를 생성하여 다음과 같이 작성한다.

NODEMAILER_USER=메일 보내는 ID NODEMAILER_PASS=비밀번호

그리고 프로젝트 기본 폴더에서 template 폴더를 생성하고 그 안에 authMail.ejs라는 파일을 생성하여 다음과 같이 작성한다.

<html> <body> <div> <p style='color:black'>회원 가입을 위한 인증번호 입니다.</p> <p style='color:black'>아래의 인증 번호를 입력하여 인증을 완료해주세요.</p> <h2><%= authCode %></h2> </div> </body> </html>

그다음은 auth.js라는 이름의 라우터를 작성한다.

const express = require('express'); const router = express.Router(); const nodemailer = require('nodemailer'); const ejs = require('ejs'); const path = require('path'); var appDir = path.dirname(require.main.filename); router.post('/mail', async(req, res) => { let authNum = Math.random().toString().substr(2,6); let emailTemplete; ejs.renderFile(appDir+'/template/authMail.ejs', {authCode : authNum}, function (err, data) { if(err){console.log(err)} emailTemplete = data; }); let transporter = nodemailer.createTransport({ service: 'gmail', host: 'smtp.gmail.com', port: 587, secure: false, auth: { user: process.env.NODEMAILER_USER, pass: process.env.NODEMAILER_PASS, }, }); let mailOptions = await transporter.sendMail({ from: `곰방`, to: req.body.mail, subject: '회원가입을 위한 인증번호를 입력해주세요.', html: emailTemplete, }); transporter.sendMail(mailOptions, function (error, info) { if (error) { console.log(error); } console.log("Finish sending email : " + info.response); res.send(authNum); transporter.close() }); }); module.exports=router;

위 코드를 간단하게 설명하면 랜덤한 번호를 생성하여 위에서 정의한 템플릿의 내용으로 메일을 보낸다. 메일이 성공적으로 보내지면 클라이언트 측으로 인증번호를 전송한다. 이후 클라이언트 측에서 받은 인증번호와 유저가 입력한 인증번호가 일치한다면 계속해서 회원가입 절차가 진행된다.

결과 화면

크리스마스여고괴담221219아바타2주휴수당올리브영
익명연예 엔시티 익명잡담 이성 사랑방 익명연예 (K)POP/예능

전체 인기글 l 안내

12/19 19:12 ~ 12/19 19:14 기준

1 ~ 10위

11 ~ 20위

1익명연예  미국익 ditto 이거밖에 생각 안남  17

2익명잡담  딸내미 밥상 보고 김치 찾는 케이맘  9

3인티포털  샤이니 키 인스타그램 업데이트  4

4익명잡담  의사가 서류 떼주기 싫다는데 신고하면 먹힘?  31

5익명잡담  핫플  해산물 '아예' 안 먹는다고 10년째 얘기하고 있는데  50

6인티포털  눈오리로 혼자 놀다가 딩초들이랑 노는데 나 대장됐음  38

7익명연예  뉴진스 뮤비랑 가사 공식적인 해석은 이거야  4

8익명연예  뉴진스가 경쟁해야하는 어떤가수가 너무 쎄다...  4

9인티포털  폭락한 한우 가격 근황.jpg  3

10인티포털  섹스가 왜 일탈이야?.txt  20

1 ~ 10위

11 ~ 20위

익명잡담 잡담의 인기글 l 안내

12/19 19:12 ~ 12/19 19:14 기준

1 ~ 10위

11 ~ 20위

9

1 딸내미 밥상 보고 김치 찾는 케이맘9

2 의사가 서류 떼주기 싫다는데 신고하면 먹힘?31

2

3 해산물 '아예' 안 먹는다고 10년째 얘기하고 있는데50

1

4 순천향 의예과 많이 쎄??19

1

5 연세우유 옥수수생크림빵 단종 전에 겟11

13

6 급상승  혹시 '양기 충전'한다라는 표현이 좀 야하고 저급한 표현이야?14

2

7 근데 ㄹㅇ 학점 2.8 출석하고 할거 다하면13

1

8 카페에 30분째인데 30분동안 같은 가수 노래만 나오거든9

4

9 여자면 애교있고 살가워야돼??18

2

10 남자애들이 약간 조심스럽게 대하는 애들 특징이 뭐야??8

1 ~ 10위

11 ~ 20위

이메일 문의 l 개인정보취급방침 l 사업자정보확인 l 권리 침해 l 광고/제휴 l 채용 l 모바일

(주)인스티즈 l 서울시 강남구 논현로94길 25-8, 3층 l 사업자등록번호 : 655-86-00876 l 통신판매업신고 : 2017-서울강남-03991 l 대표 : 김준혁
TEL : 070-7720-0983 (FAX : 050-7530-7181)

Toplist

최신 우편물

태그