[Vid+] nodemailer

JungChihoon·2020년 2월 26일
0

Project

목록 보기
18/19

로그인 시 비밀번호를 분실했을 때 사용자에게 임시 비밀번호를 발송해주는 기능이 필요했다.

여러가지 참조문서를 보고 node server에서 메일을 보낼 수 있는 nodemailer라는 메일 전송 모듈을 사용해 보기로 했다. 이유는 사용법이 꽤 간편했기 때문이다.(프로젝트기간과 나의 실력으로도 사용할 수 있는 정말 간편한 모듈이다.ㅎㅎ)

https://nodemailer.com/about/ nodemailer의 공식 페이지다.
아래 그림은 공식 첫 페이지에 나와있는 사용 예이다. 다른 여러 기능들이 있지만 임시비밀번호 메일발송 기능이 필요한 경우는 사용 예에 있는 코드로도 충분히 적용이 가능했다. (간편하다.)

하지만 천천히 설치부터 알아보자.
공식 페이지 설치 : https://nodemailer.com/usage/

npm install nodemailer

설치를 한 후 nodemailer를 가져온다.

const nodemailer = require('nodemailer');

위 그림의 mail함수에서는 메일 계정을 만들고 보내는 메일을 만들고 메일을 보내는 일을 한다.

함수 안에 변수에 어떤 함수가 할당되었는지 보자.

testAccount변수에는 테스트용 메일 계정을 만드는 것을 하는데 테스트용 메일이 있다거나 회사메일이 있다면 작성하지 않아도 되는 코드이다. 테스트 메일이 없는 경우 작성한다.

transporter라는 변수는 임시비밀번호를 보내줄 메일에 대한 내용을 만드는 함수를 만들어 할당한 것이다. 위 사진에는 테스트메일에 대해 적었는데 나는 내 메일로 보냈으니 내 메일에 대해 적었다.

대충 이런 식이다. 자세한 건 공식문서에 자세하고 다양한 기능들이 있으니 여기서는 맛만 보자.
파라미터로는 나중에 임시비번을 받을 메일에 대한 정보가 있는 객체를 받는다.(이건 나중에)

우선 transporter 변수는 createTransport메소드를 사용해 보내는 메일을 만든다.
createTransport메소드 참조 : https://nodemailer.com/usage/
service는 구글을 쓰고 auth는 내 메일과 내 비번에 대해 적은 객체를 파라미터로 넣었다.

다음은 mailOptions다. 보내는 메일, 받는 메일, 메일내용과 작성에 대한 내용을 객체에 담는다.
29번째 줄은 아까 큰 사진에 param으로 받은 객체에 있는 임시비번을 받을 메일주소가 있다.
32번째 줄은 param으로 받은 객체에 랜덤으로 만든 비밀번호를 넣었다.
옵션은 여러가지가 있으니 공식문서를 보고 더 많은 기능을 사용해보도록 해야겠다.

이제 메일을 보내야한다.
transporter에 sendMail메서드를 써서 임시 비밀번호를 보내자.
파라미터로 아까 mailOptions과 callback함수를 넣는데 이것은 메일전송이 성공/실패하면 실행되는 함수인데 선택적이라 꼭 안넣어도 되는데 나는 당시에 잘 몰라서 그냥 넣은 코드다.

테스트 해보자.

  • 나 비번 잃어버렸음.

  • 알겠음.

  • 임시비번 보냄

성공

nodemailer는 메일전송모듈이기 때문에 나처럼 임시비밀번호를 발송시켜줘도 되고 광고메일이나 단체메일 발송과 같은 일을 할 때 사용해도 좋을 것 같다는 생각이 들었다.
나도 사용했으니 간편한 건 확실하다.

아직 덜 끝남!!(추가 처리해야하는 것)

추가로 서버에서 임시비밀번호를 보내주고 난 뒤 임시비밀번호를 암호화하고 암호화된 비밀번호를 database에 수정을 시켜줘야한다.
애써 임시비밀번호보내주고 정작 database에 임시비번이 없으면 아무 소용없기 때문이다.
그리고 보안도 중요하니 임시비번을 암호화해서 database에 저장하자.

profile
주니어 개발자

0개의 댓글