성장기의 히동

[Playwright/Python] Mailpit으로 가상 STMP 서버 구성하기 본문

☁️ QA

[Playwright/Python] Mailpit으로 가상 STMP 서버 구성하기

용히동 2026. 3. 12. 01:07

🌼

이번 글에서는 Mailpit을 이용해 가상 STMP 서버를 구성하는 과정을 정리했다.

실제 아이디로 로그인하고 메일함에 들어가는 번거로운 과정 없이, 이메일 인증 과정을 보다 간편하게 테스트 할 수 있다.


❓Mailpit이란?

로컬 환경에서 이메일 전송 기능을 개발/테스트할 때 사용하는 오픈소스 로컬 SMTP 서버이자 메일 뷰어 (UI 제공)

흔히 사용하는 Gmail과 같은 실제 서버를 이용하지 않고도 애플리케이션에서 발송하는 모든 메일을 중간에서 가로채서 웹 브라우저에서 바로 확인할 수 있게 해준다.


💭 도입 배경

- 내가 테스트하는 실시간 채팅 서비스는 회원가입을 해야 이용할 수 있고, 회원가입 시 이메일 인증이 필수이다.

- DB에 직접 데이터를 넣어서 테스트 계정을 생성할까 싶었는데, 그럼 E2E 테스트 본질에서 벗어난다.

 

➡️ 그래서 나는 이메일 인증 자동화 테스트를 반드시 코드로 구현해야 했다.

 

백엔드 서버의 application.yml 파일에는 실제 Gmail STMP 서버로 설정돼있었는데, 실제 STMP 서버를 이용할 경우 테스트 과정이 너무 번거로웠다.

- 테스트하고자 하는 웹에 더불어 실제 Gmail에 로그인을 하고, 메일함에 들어가서 최신 메일을 가져와 검증해야 한다.

 

👌🏻 그래서 로컬 SMTP 서버인 Mailpit을 이용해 이메일 인증 자동화를 구현하기로 했다.


🛠️ Mailpit 설정 과정

1. Mailpit 설치

Mailpit 설치 방법은 크게 두 가지다.

- 로컬 설치

- Docker로 컨테이너 실행하기

나는 환경 관리를 좀 더 쉽고 깔끔하게 하기 위해 Docker로 컨테이너를 띄우는 방식을 택했다.

(Mailpit 공식 문서에서 설치 방법을 세부적으로 확인할 수 있다.)

https://mailpit.axllent.org/docs/install/

나는 Docker로 설치할 거라, 위 페이지에서 공식 도커 이미지를 확인하고 pull 해서 컨테이너를 실행했다.

  • docker 공식 이미지 Pull

docker pull axllent/mailpit

 

  • docker 컨테이너 실행, 8025 포트와 1025 포트를 열어줌 (공식 홈페이지의 Usage와 동일한 명령어임)
  • --restart ~ : PC 재부팅 시 자동으로 컨테이너 다시 시작 (필요 없으면 제거)
  • -d : 백그라운드 모드로 실행
  • --name=mailpit : 컨테이너 이름 mailpit으로 지정
  • 하단에 보면 WebUI는 8025 포트를 사용하고, STMP는 1025 포트를 사용한다고 명시되어 있어서 두 포트 모두 열어줬다.

docker run -d \ --restart unless-stopped \ --name=mailpit \ -p 8025:8025 \ -p 1025:1025 \ axllent/mailpit

 

  • 실행중인 컨테이너 목록 확인

docker ps

실행중인 rabbitmq 컨테이너까지 조회되는 모습

  • 구체적으로 mailpit 이름으로 확인하고 싶으면

docker ps -f name=mailpit

mailpit 이름의 컨테이너만 조회되는 모습

  •  웹 UI 확인

http://localhost:8025

Mailpit 웹 브라우저 화면

 

2. 백엔드 application.yml 파일 수정

  # ── Mail (Mailpit 로컬 테스트용 SMTP) ─────────────────────────────────────────
  mail:
    host: localhost
    port: 1025
    username: test@youngchat.com
    password: test
    properties:
      smtp:
        auth: false
        starttls:
          enable: false

 

username은 RFC 5321 형식의 유효한 이메일 주소여야 에러가 나지 않는다.

나는 에러 한 번 봤따 ^.^...

 

8025 포트는 웹 브라우저에서 확인하려고 열은 포트라 실제 STMP 처럼 사용하려면 1025로 열어줘야 한다.

그럼 설정은 끝났다. 완전 간단!

 


❗️실제로 작동하는지 확인하기

    def send_auth_email(self):
        self.auth_email_button.click()

내가 테스트하는 웹은 이메일 주소를 입력하고, 인증 버튼을 누르면 이메일이 전송된다.

그래서 인증 이메일을 전송하는 버튼을 미리 페이지별로 POM 형식으로 잡아놓고, 클릭만 한다.

 

 

그럼 이렇게 Mailpit 웹 브라우저에서 실제로 인증 메일이 도착한 것을 확인할 수 있다.

 

베리 이지 ! 

 

그러면 다음 포스팅에서는 Mailpit을 이용해 이메일 테스트 자동화 한 과정을 구체적으로 다뤄보겠다.

많은.. 일이..있었다..