Node.js의nodemailer모듈을 사용하여 이메일 전송하기
nodemailer 설치
$ npm i nodemailer
client
이메일을 입력하는 input 창과 "인증코드 발송"이라는 button 을 하나 생성해주었다.
그리고 input 창에는 input 이라는 ref 를 설정해주었다.
const input = useRef();
// 서버에서 보내준 인증번호를 저장할 code state
const [code, setCode] = useState('');
<input type="text" name="email" placeholder="이메일" ref={input}></input>
<button onClick={sendEmail}>인증코드 발송</button>
버튼을 클릭했을 때 sendEmail 함수가 실행되도록 하였으며, 서버에 input 창에 입력된 이메일 주소를 보내주었다.
const sendEmail = async () => {
let result = await axios.post(BACK_SERVER + "/email", {email: input.current.value});
// 들어온 인증코드를 code state에 저장해주었다.
setCode(result.data);
}
server
const nodemailer = require('nodemailer');
exports.sendEmail = async (req, res) => {
// 인증코드를 위한 난수 생성 (11111 ~ 99999)
// 생성된 인증코드를 사용자에게 메일로 안내하고 비교를 위해 클라이언트에게도 넘겨줄 것이다.
const number = Math.floor((Math.random() * (99999 - 11111)) + 11111);
let transporter = nodemailer.createTransport({
service: 'gmail',
prot: 587,
host: 'smtp.gmail.com',
secure: false,
requireTLS: true,
// 메일을 보낼 구글 이메일과 비밀번호
auth: {
user: process.env.google_email,
pass: process.env.google_pw
}
});
let info = await transporter.sendMail({
from: process.env.google_email,
// 클라이언트에서 받아온 이메일 주소
to: req.body.email,
// 메일 제목
subject: '[내일 뭐하지?] 이메일 인증번호',
// 메일 내용
text: "인증번호 " + String(number)
});
// 클라이언트에게 생성한 난수 인증코드를 보내준다.
res.send(String(number));
}
+) 구글 계정이 2단계 인증을 사용하고 있다면 [ Google 계정 관리 - 보안 - 앱 비밀번호 ] 에서 앱 비밀번호를 생성 후 생성된 비밀번호를 입력하면 된다.