728x90
반응형

smtp 4

[NestJS] 이메일 시스템 설계: Nodemailer + Handlebars 레이아웃/파셜 완벽 적용기

지난 글에서 Gmail SMTP 연동까지 성공하셨나요?(이전 글 보기) 오늘은 거기서 한 단계 더 나아가, 실무 레벨의 이메일 시스템을 구축해 보려 합니다.단순히 HTML 파일 하나 불러와서 보내는 건 쉽습니다.하지만 메일 종류가 10개, 20개로 늘어난다면 어떨까요?"헤더 로고가 바뀌었어요, 메일 20개 다 수정해주세요." 이런 요청을 받았을 때 식은땀이 흐른다면, 오늘 소개할 Layouts(레이아웃)과 Partials(파셜) 구조가 정답입니다.제 실제 사이드 프로젝트 코드의 핵심 로직을 가져왔으니, 복사해서 여러분의 프로젝트에 맞게 녹여보세요!🤔 잠깐, 왜 EJS 대신 Handlebars인가요?Node.js 진영에는 EJS도 많이 쓰입니다.하지만 이메일 템플릿만큼은 Handlebars를 선호합니다...

Backend/NestJs 2026.01.12

[NestJS] 이메일 발송 기능 구현: Nodemailer와 Gmail SMTP 연동

서비스를 개발하다 보면 회원가입 인증, 비밀번호 찾기, 알림 등 이메일 발송 기능이 필요한 순간이 반드시 찾아옵니다.이번 글에서는 NestJS에서 nodemailer를 사용하여 가장 깔끔하고 안전하게 이메일 서비스를 구축하는 방법을 정리해 보았습니다. 특히 하드코딩 없이 ConfigService를 활용해 설정을 분리하는 실무적인 패턴을 중점으로 다뤄보겠습니다.1. 필수 패키지 설치가장 먼저 필요한 패키지들을 설치해야 합니다.NestJS는 Nodemailer를 래핑한 공식 패키지를 제공하고 있어 훨씬 편하게 사용할 수 있습니다.타입스크립트 환경이므로 타입 정의 파일도 함께 설치해 줍니다.# npm 사용 시npm install --save @nestjs-modules/mailer nodemailernpm i..

Backend/NestJs 2026.01.06

Railway 배포 시 이메일 발송 삽질기: SMTP Timeout부터 Resend 포기, 그리고 회귀까지

최근 사이드 프로젝트를 진행하면서 백엔드 서비스를 Railway에 배포했습니다.로컬 환경에서는 이메일 회원가입 인증 기능이 완벽하게 작동했는데, 막상 서버에 올리고 나니 메일 발송 부분에서 계속해서 무한 로딩이 걸리다가 Timeout 에러가 발생하는 현상을 겪었습니다.처음엔 단순한 방화벽 문제인 줄 알았는데, 해결하려고 파고들다 보니 Resend 찍고 다시 SMTP로 돌아오게 된 긴 여정이 있었습니다.오늘은 저처럼 무료 호스팅과 이메일 서비스 사이에서 방황하는 분들을 위해, Railway에서의 이메일 발송 시행착오 과정을 공유하려 합니다.1. 첫 번째 난관: 갑작스러운 SMTP Timeout로컬(Localhost)에서는 Nodemailer와 구글 Gmail SMTP를 연동해 테스트했을 때 아무런 문제가 ..

[SMTP] 메일에서 base64 이미지 깨지는 현상 CID로 해결해보기

개요사내 메일 서비스 내에서 태그에 base64로 이루어진 이미지들이 깨지는 현상이 발견되었다.원인을 찾아보고자 사내 메일 서비스 담당자에게 연락을 취했으나"base64를 사용하는 이미지는 지원하지 않으며 https로 되어있는 url을 직접 걸어 이미지를 붙이면 됩니다." 라는 답변을 받았다하지만 현재 MSA의 서비스 구성상 https로 열려있는 파일 서비스가 없었으며, gateway를 제외한 서비스는 모두 내부망으로 되어있다.gateway를 통해 파일 서비스의 특정 디렉토리의 파일만 접근 가능하게 구현은 할 수 있으나 이런 방식은 올바른 형식이 아니라 판단되어 다른 방법을 고민했다.해결 방안메일 서비스에서는 CID(Content ID)라는 기능이 있었다.메일 본문 내에 포함된 이미지에 고유 식별자를 ..

Backend/Java 2025.11.11