[Project] nodemailer로 메일 전송

do_Rang·2025년 7월 9일

Project

목록 보기
7/7

🤔 문제

프로젝트 진행 중 회원가입 시 이메일 인증과 비밀번호 찾기를 구현해야 했다. 나는 node.js 환경에서 개발하고 있기 때문에 Node.js를 위한 이메일 모듈로 이미 유명한 nodemailer를 사용하기로 결정했다.

🚀 실습

두 곳에서 호출해야 하기 때문에 아예 함수로 분리해줬다.

export const mailSend = async (to : string, subject : string, text : string, html : string) : Promise<MailSendResult> => {
  // 받는 사람, 메일 제목, 내용(text), 내용(html)를 전달받는다
}

SMTP 서버의 환경을 설정해주어야 한다.

import nodemailer from 'nodemailer';
import dotenv from 'dotenv';

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

나는 naver 메일을 이용해서 host, port, secure를 직접 설정했는데, nodemailer에서 SMTP 설정을 제공하는 service를 이용하면 세세하게 설정하지 않아도 된다.
gmail, yahoo, icloud 등이 있다.

naver에서 SMTP를 이용하기 위해서는 사전 설정이 필요하다.

메일의 환경설정에서 SMTP 사용을 눌러준다.

mailOptions에 매개로 받은 내용과 보내는 이메일까지 설정한 뒤 nodemailer가 제공하는 함수인 sendMail을 통해서 메일을 발송해준다.

const mailOptions = {
  from: process.env.EMAIL_USER,
  to: to, 
  subject: subject,
  text: text, 
  html: html
};

const result = await transporter.sendMail(mailOptions);

테스트 코드를 작성한 뒤 실행해보았다.
에러가 발생했다.....

나는 아이디에 2단계 인증을 사용하고 있지 않아서 env파일에 날것의 아이디와 비밀번호를 입력해놓았다. 그렇지만 보안 문제로 앱용 비밀번호를 발급받아서 사용해야 보내지는 것 같다. 🥹

놀랍게도 SMTP 설정할 때 여기서 설명하고 있었는데 내가 안보고 지나갔던 것.. 차근차근 따라가 보자.

네이버 프로필 수정 - 보안설정에 들어간 뒤 2단계 인증 관리를 눌러준다.

2단계 인증을 설정한 뒤 애플리케이션 비밀번호를 발급해야 한다. SMTP를 입력하고 생성하기를 누르면 비밀번호 확인 란에 랜덤한 비밀번호가 생성된다.

발급받은 비밀번호를 env파일에 입력하면!!

메일이 드디어 전송되었다!!

결론

  • 복잡한 설정 없이 메일을 전송할 수 있게 해주는 nodemailer 최고 👍
  • 설명을 잘 보고 다니자.
profile
공부하자

0개의 댓글