
Google의 앱 비밀번호와 Nodemailer를 활용해 Gmail SMTP 서버를 통해 인증 메일을 전송하는 방법을 단계별로 서술.
이 과정에서는 Google 계정의 2단계 인증과 앱 비밀번호 설정이 필요하다.
설정을 완료한 후에는 Nodemailer를 사용해 원하는 이메일을 쉽게 전송할 수 있다.
Google 계정에 로그인하고, 계정 설정 페이지로 이동한다. Google 계정 관리에서 설정을 변경할 수 있다.
2단계 인증 활성화:
💡 참고: Google 계정에서 생성한 앱 비밀번호는 평생 유효하며, Google이 허용하는 다른 애플리케이션과의 연동에서도 사용할 수 있습니다. 노출되지 않도록 안전하게 보관하는 것이 좋습니다.
Gmail SMTP 서버를 통해 메일을 전송하기 위한 Nodemailer 설정
pnpm install nodemailer
import nodemailer from "nodemailer";
export const transporter = nodemailer.createTransport({
service: "gmail",
host: 'smtp.gmail.com',
port: 465, // SSL
// port: 587, // TLS
secure: true, // SSL은 true TLS는 false
requireTLS: false,
auth: {
user: "TEST_SENDER@gmail.com", //구글 메일 주소
pass: "", //구글 앱 비밀번호
},
});
이 예제에서는 Next.js의 API 라우트를 사용하여 HTTP POST 요청을 통해 이메일을 전송하는 API를 구현.
// api/mail.ts
import { NextRequest, NextResponse } from "next/server";
import { transporter } from "./transporter";
export async function POST(req: NextRequest) {
try {
// 요청에서 메일 수신자, 제목, 내용 추출
const { to, subject, html } = await req.json();
// 이메일 옵션 설정
const mailOptions = {
from: `발신자 이름 <TEST_SENDER@gmail.com>`, // 발신자 이메일 주소
to, // 수신자 이메일 주소
subject, // 이메일 제목
html, // 이메일 내용 (HTML 형식)
// attachments: ["첨부파일"], // 첨부 파일이 있을 경우 추가
};
// Nodemailer를 이용해 이메일 전송
await transporter.sendMail(mailOptions);
// 전송 성공 응답
return NextResponse.json(
{ ok: true, msg: "인증 메일 전송 성공" },
{ status: 200 }
);
} catch (e: any) {
// 전송 실패 시 에러 코드와 메시지 반환
return NextResponse.json(
{ ok: false, msg: "인증 메일 전송 실패!" },
{ status: e.responseCode || 500 }
);
}
}
const sendEmail = async () => {
const response = await fetch("/api/mail", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
to: "RECIPIENT@example.com",
subject: "인증 메일 도착!",
html: "<p>여기를 클릭하여 인증하세요: <a href='https://example.com'>인증 링크</a></p>",
}),
});
const data = await response.json();
if (data.ok) {
console.log("이메일 전송 성공!");
} else {
console.error("이메일 전송 실패:", data.msg);
}
};
Gmail SMTP 서버는 무료로 사용할 수 있으나, 한 시간당 전송 제한이 있으며 무분별한 메일 전송은 계정 제한이 될 수 있다. 테스트 시에는 적절한 빈도로 메일을 보내는 것이 좋다.

2단계 인증
