nodemailer

sese·2022년 10월 20일

새싹

목록 보기
27/39

Node.jsnodemailer 모듈을 사용하여 이메일 전송하기


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 계정 관리 - 보안 - 앱 비밀번호 ] 에서 앱 비밀번호를 생성 후 생성된 비밀번호를 입력하면 된다.

profile
예전 글은 다크모드로 봐야 잘 보일 수도 있습니다.

0개의 댓글