NodeJs - 이메일 인증 (nodemailer)

김정욱·2020년 12월 12일
2

NodeJS

목록 보기
21/22
post-thumbnail

Nodemailer ?

: Node.js에서 사용하는 이메일 전송 라이브러리


  • Emoji를 포함한 Unicode를 지원
  • Plain text는 물론이고, HTML content를 사용
  • SMTP 를 포함한 다양한 전송 방식을 지원
  • OAuth2 인증방식을 지원
  • 그 외 자세한 정보는 공식 사이트 (https://nodemailer.com/about/)

[ 적용하기 ]

1) Naver 메일 SMTP 사용 설정

  • 사실 Gmail도 많이 쓰지만 / Gmail은 하루에 500개가 제한이라서 Naver 이용 !

2) nodemailer 설치
npm install nodemailer --save
또는
yarn add nodemailer --dev


3) 관련 코드 작성

(/config/email.js)

const nodemailer = require('nodemailer');

const smtpTransport = nodemailer.createTransport({
    service: "Naver",
    auth: {
        user: "YourEmail@naver.com",
        pass: "YourPasswor"
    },
    tls: {
        rejectUnauthorized: false
    }
  });

  module.exports={
      smtpTransport
  }
  • 실제 계정의 정보가 들어있으므로 /config에 위치한다
  • 보호되어야 하는 파일이기 때문에 .gitignore에 등록해야 한다 ! 꼭 !

(/controllers/user.js)

const { smtpTransport } = require('../config/email');

  ...

  /* min ~ max까지 랜덤으로 숫자를 생성하는 함수 */ 
  var generateRandom = function (min, max) {
    var ranNum = Math.floor(Math.random()*(max-min+1)) + min;
    return ranNum;
  }

  const auth = {
    SendEmail : async(req, res) => {
        const number = generateRandom(111111,999999)

        const { sendEmail } = req.body;

        const mailOptions = {
            from: "정욱이네러버덕",
            to: sendEmail,
            subject: "[러버덕]인증 관련 이메일 입니다",
            text: "오른쪽 숫자 6자리를 입력해주세요 : " + number
        };

        const result = await smtpTransport.sendMail(mailOptions, (error, responses) => {
            if (error) {
                return res.status(statusCode.OK).send(util.fail(statusCode.BAD_REQUEST, responseMsg.AUTH_EMAIL_FAIL))
            } else {
              /* 클라이언트에게 인증 번호를 보내서 사용자가 맞게 입력하는지 확인! */
                return res.status(statusCode.OK).send(util.success(statusCode.OK, responseMsg.AUTH_EMAIL_SUCCESS, {
                    number: number
                }))
            }
            smtpTransport.close();
        });
    }
}
  • 랜덤한 6자리 번호를 생성시켜 메일 전송에 성공하면 클라에게 response!
  • 클라이언트에서 해당 번호와 사용자가 입력한 번호를 비교하여 처리 !
profile
Developer & PhotoGrapher

0개의 댓글