From c18cdbfac1964de1116235d5da1657595e82837f Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 23 Mar 2026 09:10:17 +0100 Subject: [PATCH] feat(dev): add Mailpit mail catcher to docker-compose Adds a Mailpit container that catches all outgoing emails locally so password reset links can be tested without a real SMTP server. - Backend defaults to MAIL_HOST=mailpit / MAIL_PORT=1025 in compose - SMTP auth and STARTTLS disabled for Mailpit (no credentials needed) - Web inbox available at http://localhost:8025 - Production SMTP still works by overriding MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_SMTP_AUTH, and MAIL_STARTTLS_ENABLE in .env Co-Authored-By: Claude Sonnet 4.6 --- docker-compose.yml | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index bf9b8b14..16fef739 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -58,6 +58,19 @@ services: networks: - archive-net + # --- Mail catcher: Mailpit (dev only) --- + # Catches all outgoing emails and displays them in a web UI. + # Access the inbox at http://localhost:${PORT_MAILPIT_UI} after starting the stack. + mailpit: + image: axllent/mailpit:latest + container_name: archive-mailpit + restart: unless-stopped + ports: + - "${PORT_MAILPIT_UI:-8025}:8025" # Web UI + - "${PORT_MAILPIT_SMTP:-1025}:1025" # SMTP + networks: + - archive-net + # --- Backend: Spring Boot --- backend: build: @@ -74,6 +87,8 @@ services: condition: service_healthy minio: condition: service_healthy + mailpit: + condition: service_started environment: SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB} SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER} @@ -84,11 +99,15 @@ services: S3_BUCKET_NAME: ${MINIO_DEFAULT_BUCKETS} S3_REGION: us-east-1 APP_BASE_URL: ${APP_BASE_URL:-http://localhost:3000} - MAIL_HOST: ${MAIL_HOST:-} - MAIL_PORT: ${MAIL_PORT:-587} + # Defaults to the local Mailpit catcher — override in .env for production SMTP + MAIL_HOST: ${MAIL_HOST:-mailpit} + MAIL_PORT: ${MAIL_PORT:-1025} MAIL_USERNAME: ${MAIL_USERNAME:-} MAIL_PASSWORD: ${MAIL_PASSWORD:-} APP_MAIL_FROM: ${APP_MAIL_FROM:-noreply@familienarchiv.local} + # Mailpit needs no auth or STARTTLS; production SMTP overrides these via .env + SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH: ${MAIL_SMTP_AUTH:-false} + SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE: ${MAIL_STARTTLS_ENABLE:-false} ports: - "${PORT_BACKEND}:8080" networks: