Nodemailer는 node서버에서 메일을 보낼 수 있는 메일 전송 모듈이다.
기존 회사에서 진행하는 프로젝트는 firebase를 데이터베이스로 사용해서 백엔드 서버 개발 없이 진행되었다. 프로젝트 진행 중 유저들이 실제 이메일로 가입하는지 확인하는 과정에 대한 개발이 필요했고 그 방법으로 유저가 작성한 이메일에 인증번호를 적은 메일을 발송하고 유저가 그 인증번호를 확인하고 알맞게 기입하면 회원가입을 할 수 있는 방식으로 구현하기로 했다.
기존 프로젝트는 React + firebase 구성으로 된 프로젝트이기 때문에 백엔드 서버가 없었지만 나중에 백엔드 서버개발로 프로젝트 전환이 필요해서 미리 NodeJS + Express 로 백엔드 서버를 만들고 nodemailer를 사용하기로 했다.
먼저 node.js + express로 서버를 만들고 routes 폴더에 mail.js라는 파일을 만들어주었다.
mail.js
const express = require("express");
require("dotenv").config();
const router = express.Router();
let nodemailer = require("nodemailer"); // 노드메일러 모듈을 사용할 거다!
router.get("/", function (req, res, next) {
res.send("respond with email");
});
router.post("/", async function (req, res) {
const user_email = req.body.email; // 받아온 email user_email에 초기화
let number = Math.floor(Math.random() * 1000000) + 100000; // 난수 생성
if (number > 1000000) {
// 난수가 1000000 보다 크다면
number = number - 100000; // 100000을 뺀다
}
// 메일발송 함수
const transporter = nodemailer.createTransport({
service: "gmail", // 사용하고자 하는 서비스
// prot: 587,
// host: "smtp.gmlail.com",
// secure: false,
// requireTLS: true,
auth: {
user: process.env.EMAIL, // gmail주소입력 (env 파일에 숨김)
pass: process.env.PASSWORD, // gmail패스워드 입력 (env 파일에 숨김)
},
});
await transporter.sendMail({
from: "our_email_example", // 보내는 주소 입력
to: user_email, // 위에서 선언해준 받는사람 이메일
subject: "이메일 인증코드", // 메일 제목
text: `인증번호 입력란에 인증번호 ${number} 를 입력해주세요`, // 메일 내용
});
res.json({
isSuccess: true,
authorizeCode: `${number}`, // client에게 인븡번호를 보내준다.
});
});
module.exports = router;
그리고 client(React)에서는 해당 endpoint에 post요청으로 유저가 적은 이메일을 보내고 서버에서는 authorizeCode를 client에 보내고 client는 유저가 적은 인증번호가 맞는지 확인할 수 있다.