[다이어리프로젝트] SMTP_이메일 본인인증

송나·2025년 2월 1일

💡 회원가입 이메일 본인인증

목표 : 회원가입시 이메일을 통해 본인인증하려고함. 네이버 SMTP 서버를 활용해서 인증번호 전송하고 확인해서 회원가입 진행.


📑 인증번호 생성

⦁ 랜덤숫자와 숫자+문자조합 고민
⦁ 인증번호는 6자리로 정함
Math.random() : 0과 1사이 랜덤 소수 생성

const code = () => {
  return Math.floor(100000 + Math.random() * 900000).toString();
};
  1. 랜덤숫자는 6자리 100000~999999 범위의 값
  2. 최소값 + Math.random() * (최대값-최소값+1)
  3. Math.floor() 정수변환
const code = () => {
  return Math.random()
    				.toString(36) // 0.qw3rty
    				.slice(2, 8)
    				.toUpperCase();
};
  1. 숫자문자조합이 필요함.
  2. 소수 36진수 문자열로 변환(0-9와 a-z)
  3. 6자리 추출
  4. 대문자변환

📑 SMTP 서버 설정

⦁ 네이버 메일 > 왼쪽 네비 환경설정
⦁ POP3/IMAP 설정 > IMAP/SMTP 사용함 저장
⦁ 백엔드 npm init -y (Node.js 프로젝트 초기화 package.json 파일 생성)
⦁ 백엔드 npm i express nodemailer dotenv cors
.env 파일생성
📌 환경변수에 특수문자 있을경우 다른 의미로 해석되는 것을 방지하기위해 큰따옴표("") 또는 작은따옴표('') 사용하기📌

EMAIL_USER=email@naver.com
EMAIL_PASS=email_password

index.js 파일생성

const nodemailer = require("nodemailer");
require("dotenv").config();

// SMTP 설정
const transporter = nodemailer.createTransport({
    host: "smtp.naver.com",
    port: 587,
    secure: false,
    auth: {
        user: process.env.EMAIL_USER,
        pass: process.env.EMAIL_PASS,
    },
});

// 이메일 전송 API
app.post("/sendemail", async (req, res) => {
    const { email } = req.body;
    console.log("이메일:", email);

    const code = Math.random().toString(36).slice(2, 8).toUpperCase();

    const mailOptions = {
        from: process.env.EMAIL_USER,
        to: email,
        subject: "[  ] 이메일 인증코드를 확인해주세요.",
        text: `안녕하세요. 이메일 확인을 위한 인증코드를보내드립니다. 기록 인증 코드는 ${code}입니다.`,
    };

    try {
        await transporter.sendMail(mailOptions);
        return res.status(200).json({ message: "이메일 발송 성공", code });
    } catch (error) {
        console.error("이메일 전송 실패:", error);
        return res.status(500).json({ message: "이메일 발송 실패" });
    }
});

0개의 댓글