일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 코틀린
- hoos
- nodejs
- Android
- 안드로이드
- itemBackground
- Redux
- 리액트
- react
- 커스텀옵션메뉴
- 옵션메뉴꾸미기
- custom
- 팝업메뉴
- 자바스크립트
- JS
- Hooks
- framework
- toolkit
- state_checked
- JavaScript
- ContextAPI
- 팝업메뉴 꾸미기
- Menu
- 메뉴클릭
- bottomNav
- Dialog
- javaSrcript
- Node
- readAsDataURL
- redux/toolkit
- Today
- Total
대기업을 향한 디벨롭 블로그
nodemailer를 사용하여 이메일 인증 구현하기 - SMTP , TLS 본문
nodemailer 모듈을 이용하여 이메일을 보내볼거다.
Nodemailer :: Nodemailer
Nodemailer Nodemailer is a module for Node.js applications to allow easy as cake email sending. The project got started back in 2010 when there was no sane option to send email messages, today it is the solution most Node.js users turn to by default. npm i
nodemailer.com
nodemailer공식 사이트이다. 이 문서를 참고하여 포스팅한다.
일단 SMTP에 대해 알아보겠다. 메일 전송은 SMTP(Simple Mail Transfer Protocol) 네트워크를 통해 이메일을 보내는 기술 표준 규약이다.
https://www.cloudflare.com/ko-kr/learning/email-security/what-is-smtp/
이 사이트를 참고하여 쓰겠다.
코드를 작성하며 더 알아보겠다.
일단 제일 먼저 nodemailer를 다운받아주자.
npm install nodemailer
이제 메일을 보낼 수 있는 개체를 만들어주겠다.
나는 여기서 네이버를 통해 메일을 보낼거다. 그럴려면 네이버의 메일서비스를 설정해주어야된다.
이렇게 설정해주자.
그러면 네이버에서 메일을 보내준다. 이제 코드에서 설정해주면된다. (네이버뿐만 아니라 구글도 가능하다)
*** 아 그리고 2차 인증을 꼭 해주어야된다 이거는 필수이다. 쌩비밀번호를 입력하면 안된다. ***
여기서 비밀번호를 하나 생성해서 사용해야된다. 자세한건 구글링... 2차인증 필수 ....
일단 서버의 폴더구조이다. emil.js에서 편지봉투를 만들거다.
//email.js
const nodemailer = require('nodemailer');
const smtpTransport = nodemailer.createTransport({ //2차 인증 필수 임.
service : "naver",
host : 'smtp.naver.com', //SMTP 서버명 : smtp.naver.com
post : 587, //포트번호 이 포트를 통과하는 SMTP 통신은 TLS 암호화를 이용함
secure: false , // 465의 경우 true, 다른 포트의 경우 false
requireTLS : true , // TLS 요구 하지만 587포트를 사용하기때문에 안넣어줘도될듯...?
auth : { //네이버 아이디와 비밀번호
user : 'mang4371', //네이버아이디
pass : '**********' // 네이버비밀번호(새로생성한암호화된) 이거 꼭 쌩비밀번호로 하면 절 대 안 됨
},
});
module.exports = {
smtpTransport
}
createTransport를 만들때는 개인정보들이 많이 들어있기때문에 config폴더에서 exports하여 사용을 해준다.
여기서 SMTP의 포트에 대해 알아보자.
딱봐도 587포트를 사용하는 이유가 나와있다.
이제 만들어준 smtpTransport를 가져와서 컨트롤러에서 메일을 전송해보자.
const {smtpTransport} = require('../config/email'); //위에서만든거 가져옴email.js
const generateRandom = function (min, max) { //인증번호를 위한 랜덤숫자만들어주는 함수
var ranNum = Math.floor(Math.random()*(max-min+1)) + min;
return ranNum;
}
const mailAuth = { //객체에 함수를 담음.
SendMail : (req,res)=>{ // 라우터에서 호출하는 함수. SendMail
const number = generateRandom(111111,999999); //number변수에 랜덤숫자 생성
const email = req.body.email; //사용자가 입력한 이메일을 가져옴.
const mailOptions = { //메일 옵션설정을 해주어야된다.
from : 'mang4371@naver.com', //누가보내는 것인가.. 이건 자신의 연결한 메일주소를 입력하면된다.
to : email, //사용자가 입력한 이메일 즉 도착할 주소
subject : '어플 인증 메일입니다', //메일의 제목
//메일의 내용
html : '<h1>인증번호를 입력해주세요 \n\n\n\n\n\n</h1>' + number //text를 전달할려면 key값을 html을 text로 바꿔주면된다.
}
smtpTransport.sendMail(mailOptions , (err , info)=>{ //emil.js에서 가져온 smtpTransport의 sendMail함수를 실행
console.log(info) //info를 출력해보자.
//첫번째 인자로는 mailOptions이 들어가야된다. 위에서 메일의 옵션은 만들었다. 다음인자로는 콜백함수.
if(err){ //에러시
res.json({suc : false , msg : '메일전송에 실패하였습니다'})
smtpTransport.close() //전송종료
return
}else{ //에러가 아닐시
res.json({suc : true , msg : '메일전송하였습니다' , authNumber : number});
smtpTransport.close() //전송종료
return
}
})
}
}
module.exports = mailAuth;
하나하나 주석을 달아주었다.
클라이언트가 메일 전송을 요청했을때 라우터에서 mailAuth.SendMail함수를 실행하여 메일전송을 하게된다.
테스트 해보겠다.
메일을 전송해보겠다.
그리고 콜백인자로 들어온 info를 출력해보자!
이런 정보들이 들어있다.
그리고 메일함에 가보자
html태그가 적용되서 잘왔다..
하지만 이게 네이버를 통해서 보내는거라 진짜 실무에서는 AWS SES인가? 이걸 사용하나? 잘모르겠다... 아직 알아야될게 너무많다.
일단 메일전송까지 완료했고 , 위에서 나온 TLS에 대해 알아보자.
https://www.cloudflare.com/ko-kr/learning/ssl/transport-layer-security-tls/
이 사이트에서 정말 보기쉽게 설명해준다.
일단 제일 핵심적인것만 올려준다.
'Node.js' 카테고리의 다른 글
bcrypt 비밀번호 암호화하기 (mongoose pre함수) (0) | 2022.09.14 |
---|---|
fs 사용해서 JSON에 데이터 저장하기 (0) | 2022.08.27 |
body-parser 모듈에 대하여... (0) | 2022.02.27 |
response 종류를 다루는..(쓰는족족넣어보자) (0) | 2022.02.27 |
3장 /GET요청에 대하여..(프론트엔드에서 주문들어왔습니다~) (0) | 2022.02.27 |