오늘은 nodemailer 모듈을 이용하여 메일 인증을 보내보려고 한다.
nodemailer는 node서버에서 메일을 보낼 수 있는 메일 전송 모듈이다.
나는 사용자가 비밀번호를 잊어버렸을때 사용자가 입력한 메일을 통해 임시 비밀번호를 받게 하고 그 임시 비밀번호로 로그인 하게끔 만들어 줄 것이다.
npm install nodemailer
config/senderInfo.js
{
"user": "본인의 이메일",
"pass": "이메일 비밀번호"
}
// 메일발송 객체
const mailSender = {
// 메일발송 함수
sendGmail: function (param) {
var transporter = nodemailer.createTransport({
service: 'gmail', // 메일 보내는 곳
prot: 587,
host: 'smtp.gmlail.com',
secure: false,
requireTLS: true,
auth: {
user: senderInfo.user, // 보내는 메일의 주소
pass: senderInfo.pass // 보내는 메일의 비밀번호
}
});
// 메일 옵션
var mailOptions = {
from: senderInfo.user, // 보내는 메일의 주소
to: param.toEmail, // 수신할 이메일
subject: param.subject, // 메일 제목
text: param.text // 메일 내용
};
// 메일 발송
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
}
module.exports = mailSender;
구글의 정책 변경
구글의 정책 변경으로 인해 구글 메일을 보내려면 인증을 설정 해야 한다.
2.앱 비밀번호를 생성해야한다.
router.post('/mail', async (req, res) => {
try {
const randomPw = Math.floor(Math.random() * 10000)
const { email } = req.body;
console.log('email: ', email);
let emailParam = {
toEmail: email, // 수신할 이메일
subject: '모두의 레시피에서 임시 비밀번호를 보내드립니다.', // 메일 제목
//메일 내용
text:
//임시 비밀번호 생성
`임시 비밀번호 : ${randomPw}`
};
mailSender.sendGmail(emailParam);
await User.update({ password: getHash(String(randomPw)) }, {
where: {
email: email,
}
})
res.status(200).send("성공");
}
catch (err) {
console.log('err: ', err);
}
})
module.exports = router;
랜덤한 비밀번호 4자리를 받게하고 인증을 하고 비밀번호를 받자마자 DB의 비밀번호를 getHash 함수로 감싸주고 변경해주었다.
사용자가 클라이언트 화면에서 이메일 전송을 누르면 임시 비밀번호가 보내지게 된다.