Skip to main content

5 - Mailpit

O Mailpit é um servidor SMTP de desenvolvimento que captura e-mails enviados pelas suas aplicações e os exibe numa interface web. Em vez de sair para a internet (ou cair em spam), tudo fica visível num só lugar, com busca, visualização de HTML/texto, anexos e reenvio. É a forma mais segura e previsível de validar templates, URLs, cabeçalhos e conteúdo de e-mails durante o desenvolvimento.

Por que centralizar?

  • Padrão único de SMTP para todas as stacks: menos variação, menos erro.
  • Observabilidade: todo mundo testa, você enxerga tudo em uma UI.
  • Persistência: caixa única com histórico (SQLite) para auditoria e retrabalho.
  • Zero risco: nada sai para o mundo real (não envia para destinatários externos).
Diretórios
sudo mkdir -p \
  /srv/docker/core/mailpit \
  /srv/docker/volumes/mailpit/data \
  /srv/docker/.envs
Env
sudo tee /srv/docker/.envs/mailpit.env > /dev/null <<'EOF'
TZ=America/Fortaleza
MP_DATABASE=/data/mailpit.db
MP_MAX_MESSAGES=5000
MP_LABEL=Mailpit Central
MP_UI_BIND_ADDR=0.0.0.0:8025
MP_SMTP_BIND_ADDR=0.0.0.0:1025
# Para proteger a UI, descomente e troque a senha:
# MP_UI_AUTH=admin:mailpit@wsl
EOF
Docker Compose
sudo tee /srv/docker/core/mailpit/docker-compose.yml > /dev/null <<'EOF'
# Maintainer: Maurício de Lima <mauricio@uai21.com>
# Stack: Mailpit central (SMTP de testes) — wsl.lab.local
# Criado: 2025-08-09
version: "3.8"

services:
  mailpit:
    image: axllent/mailpit:latest
    env_file:
      - /srv/docker/.envs/mailpit.env
    volumes:
      - /srv/docker/volumes/mailpit/data:/data
    networks:
      - traefik
    ports:
      - "1025:1025"   # SMTP para as apps apontarem p/ mail.wsl.lab.local:1025
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      labels:
        - "traefik.enable=true"
        - "traefik.docker.network=traefik"
        - "traefik.http.routers.mailpit.rule=Host(`mail.wsl.lab.local`)"
        - "traefik.http.routers.mailpit.entrypoints=websecure"
        - "traefik.http.routers.mailpit.tls=true"
        - "traefik.http.services.mailpit.loadbalancer.server.port=8025"

networks:
  traefik:
    external: true
EOF

Testar o serviço

{ printf 'HELO wsl.lab.local\r\n'; \
  printf 'MAIL FROM:<no-reply@wsl.lab.local>\r\n'; \
  printf 'RCPT TO:<teste@exemplo.local>\r\n'; \
  printf 'DATA\r\n'; \
  printf 'Subject: Mailpit test via Traefik\r\n'; \
  printf '\r\nHello from Mailpit!\r\n.\r\n'; \
  printf 'QUIT\r\n'; } | nc 127.0.0.1 1025