본문 바로가기

개발 일기/NodeJS

[Node] 서버에서 메일 보내기&메일 인증 #nodemailer

메일 보내기

 

- 설치하기

 

$ npm install nodemailer

 

- 예시

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'youremail@gmail.com',
    pass: 'yourpassword'
  }
});

var mailOptions = {
  from: 'youremail@gmail.com',
  to: 'myfriend@yahoo.com',
  subject: 'Sending Email using Node.js',
  text: 'That was easy!'
};

transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log(error);
  } else {
    console.log('Email sent: ' + info.response);
  }
});

기본적으로 있는 예시를 사용하면 바로 메일을 보낼 수 있다.

 

transporter에 보내는 사람의 이메일 주소와 비밀번호를 적으면 된다.

 

여기서 gmail을 사용하려면

보안 수준이 낮은 앱의 액세스 허용하기

구글 계정 설정에서 보안 수준이 낮은 앱 허용을 사용함으로 바꿔줘야 한다. 안 바꾸면 계속 비밀번호 틀렸다고 오류 뜸...

 

mailOptions에서 메일을 받는 사람의 이메일을 적고 제목과 내용을 입력해서 sendMail()로 보내면 끝!!

 

여기서 끝내기 아쉬우니 이번에 사용한 메일 인증 방식도 정리하자.

 

참고: https://www.w3schools.com/nodejs/nodejs_email.asp

 

Node.js Email

Node.js Send an Email The Nodemailer Module The Nodemailer module makes it easy to send emails from your computer. The Nodemailer module can be downloaded and installed using npm: C:\Users\Your Name>npm install nodemailer After you have downloaded the Node

www.w3schools.com

 

메일 인증 하기

 

메일 인증을 어떻게 할까 고민하다가 생각해낸 방법이다.

사용자는 메일 인증을 했는지 안 했는지에 대한 정보를 DB에 가지고 있어야 한다. (default: false)

그리고 회원 가입과 함께 인증 메일에 인증을 위한 링크를 넣어서 보낸다.

사용자는 메일에 들어가 링크를 누르면 사용자 DB에 인증 정보가 true로 바뀐다.

 

순서를 정리하면

1. 회원 가입

2. 메일에 들어갈 링크에 대한 암호화 ( 임의로 링크를 만들어서 인증하는 것을 방지 )

3. 메일 보내기

4. 사용자가 링크 클릭 ( GET 방식으로 암호화된 정보 받기 )

5. 인증 완료!! ( 사용자 DB에 인증 정보 저장 )

 

회원의 이메일의 경우 유니크해야 하기 때문에 이메일을 암호화하여 사용했다.

단방향 암호화를 하면 복호화를 못하기 때문에 복호화가 가능하도록

crypto의 createCipheriv()와 createDecipheriv()를 사용했다.

이렇게 암호화한 hash를 이메일에 링크+hash를 보내서 클릭하면 바로 get방식으로 데이터를 받을 수 있게 했다.

링크 클릭 시 받은 hash값으로 decipher를 해 hash값을 이메일로 복호화 한 뒤

해당 이메일을 가진 사용자의 인증 정보를 true로 바꿔주었다.

이렇게 인증을 하면서 몇 가지 문제가 발생했는데 이건 따로 글을 작성해야겠다.