YS's develop story

Node js 에서 메일 전송하기 (Nodemailer 이용, Node 비밀번호 찾기) 본문

기타

Node js 에서 메일 전송하기 (Nodemailer 이용, Node 비밀번호 찾기)

Yusang 2021. 3. 10. 08:44

Node js에서 메일 전송하기 (Nodemailer 이용)

 

노드 메일러는 Node.js에서 메일 전송을 가능하게 해주는 모듈이며, 가장 일반적으로 사용되고 있습니다!

 

우선 메일을 보낼 gmail을 하나 생성해 줍시다.

 

메일을 생성하고, 아래의 링크로 접속을 하여 보안 수준이 낮은 앱의 액세스를 허용해 줍시다.

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

npm을 이용해 nodemailer 모듈을 다운로드 해 줍시다. 

npm install nodemailer

 

코드에 아래와 같이 다운로드한 모듈을 사용한다는 구문을 추가해 줍니다.

const nodemailer = require('nodemailer');

 

저는 저의 서비스 이용자들이 비밀번호를 잊어버려서 찾고자 할 때,

임시 비밀번호를 nodemailer를 이용하여 서비스 이용자에게 보내려고 합니다.

 

그래서 아래와 같이 8자리의 랜덤 비밀번호를 만드는 함수를 만들었습니다.

     var variable = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z".split(",");
     var randomPassword = createRandomPassword(variable, 8);

      //비밀번호 랜덤 함수
      function createRandomPassword(variable, passwordLength) {
           var randomString = "";
           for (var j=0; j<passwordLength; j++) 
             randomString += variable[Math.floor(Math.random()*variable.length)];
              return randomString
            }

 

아래의 코드가 메일을 보내는 부분입니다.

만약 사용자가 메일을 입력하고 그 메일이 서비스 DB에 있는 메일과 일치를 한다면

임시 비밀번호를 사용자 메일로 보내도록 아래의 코드를 실행하도록 코드를 짜면 될 것입니다.

        const transporter = nodemailer.createTransport({
            service: 'gmail',
            port: 465,
            secure: true, // true for 465, false for other ports
            auth: { // 이메일을 보낼 계정 데이터 입력
              user: '@gmail.com',
              pass: 'password',
            },
          });
         const emailOptions = { // 옵션값 설정
              from: '@gmail.com',
              to: 'liyusang1@naver.com',
              subject: 'Binding에서 임시비밀번호를 알려드립니다.',
              html: 
              "<h1 >Binding에서 새로운 비밀번호를 알려드립니다.</h1> <h2> 비밀번호 : " + randomPassword + "</h2>"
              +'<h3 style="color: crimson;">임시 비밀번호로 로그인 하신 후, 반드시 비밀번호를 수정해 주세요.</h3>'
              +'<img src="https://firebasestorage.googleapis.com/v0/b/mangoplate-a1a46.appspot.com/o/mailImg.png?alt=media&token=75e07db2-5aa6-4cb2-809d-776ba037fdec">'		
              ,
            };
            transporter.sendMail(emailOptions, res); //전송

 

코드를 작성하고 Postman으로 테스트를 진행해 보았습니다.

 

Postman | The Collaboration Platform for API Development

Postman makes API development easy. Our platform offers the tools to simplify each step of the API building process and streamlines collaboration so you can create better APIs faster.

www.postman.com

 

정상적으로 잘 작동합니다!

 

 

Comments