
nodemailer란?
이메일 기능이다. express에서 제공해주는 라이브러리
외 AWS SES 서비스, Mailgum 등 많은 서비스가 더 있다.
nodemailer 사용법
mail.js: nodemailer를 이용한 메일 전송 로직 구현
goobye_template: 회원탈퇴 HTML 템플릿을 JS로 함수로 구현
welcome_template: 회원가입 환영 HTML 템플릿을 JS로 함수로 구현
const welcome = (data) => {
return `
<!DOCTYPE html>
<html>
<head>
<title>반갑습니다.</title>
</head>
<body>
<div>감사합니다.</div>
</bdoy>
</html>`;
};
module.exports = welcome;
mail.js에 nodemailer 로직 구현
const mailer = require("nodemailer");
const welcome = require("./welcome_template");
const goodbye = require("./goodbye_template");
require("dotenv").config();
// html template를 이용한 로직
const getEmailData = (to, template) => {
let data = null;
switch (template) {
case "welcome":
data = {
from: "보내는 사람 이름",
to,
subject: `hello `,
html: welcome(),
};
break;
case "goodbye":
data = {
from: "보내는 사람 이름",
to,
subject: `Goodbye `,
html: goodbye(),
};
break;
default:
data;
}
return data;
};
// nodemailer를 이용한 메일 보내기 로직
const sendMail = (to, type) => {
const transporter = mailer.createTransport({
service: "Gmail",
auth: {
// mail을 이용할 구글 계정과
// 앱 비밀번호
user: process.env.GOOGLE_USER,
pass: process.env.GOOGLE_APP_PASSWORD,
},
});
// 템플릿 함수를 mail 변수에 담음
const mail = getEmailData(to, type);
// nodemailer를 이용해서 mail 보내기
transporter.sendMail(mail, (error, response) => {
if (error) {
console.log(error);
} else {
console.log("email sent successfully");
}
transporter.close();
});
};
// 회원가입 시 메일 보내기 위해
// export - user.router.js
module.exports = sendMail;
nodemailer와 template을 불러온다.
template을 이용한 로직을 구현한다.
nodemailer를 이용해 이메일을 보내는 함수를 구현한다.
이제 회원가입 시에 이메일을 보낼 거라 회원가입 함수에 와서 함수를 완성시킨다.
const User = require("../models/user.model");
const sendMail = require("../mail/mail");
usersRouter.post("/signup", async (req, res) => {
// user 객체 생성
const user = new User(req.body);
// db에 user 저장
try {
await user.save();
// 이메일 보내기
await sendMail(user.email, "welcome");
return res.status(200).json({
success: true,
});
} catch (error) {
console.error(error);
}
});
```
메일이 성공적으로 전송 됐으면 이메일함을 확인해보면 된다.