Mailpit이란?
Mailpit은 개발 및 테스트 환경에서 사용하는 SMTP catch-all 서버다. 애플리케이션이 발송하는 모든 이메일을 가로채서 웹 UI로 확인할 수 있게 해준다. 실제 이메일이 외부로 발송되지 않으므로, 개발 중 실수로 고객에게 테스트 메일이 전달되는 사고를 방지한다.
MailHog의 후속 프로젝트로, Go로 작성되었으며 더 적은 리소스로 동작한다.
아키텍처
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Application │ │ Mailpit │ │ Mailpit │
│ (SMTP 발송) │────▶│ SMTP Server │────▶│ Web UI │
│ │ │ :1025 │ │ :8025 │
└──────────────┘ └──────────────┘ └──────────────┘
| 컴포넌트 | 포트 | 역할 |
|---|---|---|
| SMTP Server | 1025 (기본) | 애플리케이션의 SMTP 메일을 수신 |
| Web UI | 8025 (기본) | 수신된 이메일을 브라우저에서 조회 |
| API | 8025 | REST API로 메일 조회, 삭제, 검색 (자동화 테스트용) |
SMTP Catch-All이란?
수신 주소에 관계없이 모든 이메일을 가로채서 보관하는 방식이다. 실제 MX 레코드나 DNS 설정 없이, 애플리케이션의 SMTP 설정만 Mailpit으로 지정하면 동작한다.
# 애플리케이션 설정 예시
SMTP_HOST=localhost
SMTP_PORT=1025
주요 기능
| 기능 | 설명 |
|---|---|
| HTML/Text 미리보기 | 이메일의 HTML 렌더링과 텍스트 본문을 탭으로 전환하여 확인 |
| 첨부파일 확인 | 첨부된 파일 목록 조회 및 다운로드 |
| 검색 | 보낸 사람, 받는 사람, 제목, 본문으로 이메일 검색 |
| API | REST API로 이메일 조회 — E2E 테스트에서 발송 결과 검증에 활용 |
| Spam 분석 | SpamAssassin 점수 확인 (선택적) |
| SMTP Relay | 특정 조건의 메일만 실제 SMTP 서버로 중계 가능 |
| MessageID 링크 | 이메일의 Message-ID로 직접 접근 가능 |
MailHog와의 비교
| 항목 | MailHog | Mailpit |
|---|---|---|
| 언어 | Go | Go |
| 유지보수 | 2020년 이후 비활성 | 활발한 개발 중 |
| 메모리 사용 | 상대적으로 높음 | 경량 (SQLite 기반 저장) |
| 검색 | 기본적 | 전문 검색 지원 |
| API | v1/v2 | REST + WebSocket |
| HTTPS | 미지원 | 자동 TLS 지원 |
Docker 구성 예시
services:
mailpit:
image: axllent/mailpit
ports:
- "8025:8025" # Web UI
- "1025:1025" # SMTP
environment:
MP_MAX_MESSAGES: 5000 # 최대 보관 메일 수
MP_DATABASE: /data/mailpit.db # 영속 저장소
volumes:
- mailpit-data:/data관련 문서
- Celery — 비동기 Worker가 이메일 발송 태스크를 처리하면 Mailpit이 수신