From b7c2d6c35d73e943a737eb3fe22e587474a353ee Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 14 Jul 2026 12:03:04 -0600 Subject: [PATCH] feat: add MailCatcher NG template Co-Authored-By: Claude Fable 5 --- blueprints/mailcatcher-ng/docker-compose.yml | 27 ++++++++++++++++++++ blueprints/mailcatcher-ng/mailcatcher-ng.svg | 10 ++++++++ blueprints/mailcatcher-ng/meta.json | 17 ++++++++++++ blueprints/mailcatcher-ng/template.toml | 13 ++++++++++ 4 files changed, 67 insertions(+) create mode 100644 blueprints/mailcatcher-ng/docker-compose.yml create mode 100644 blueprints/mailcatcher-ng/mailcatcher-ng.svg create mode 100644 blueprints/mailcatcher-ng/meta.json create mode 100644 blueprints/mailcatcher-ng/template.toml diff --git a/blueprints/mailcatcher-ng/docker-compose.yml b/blueprints/mailcatcher-ng/docker-compose.yml new file mode 100644 index 00000000..3a31b68a --- /dev/null +++ b/blueprints/mailcatcher-ng/docker-compose.yml @@ -0,0 +1,27 @@ +services: + mailcatcher-ng: + # Only the "latest" tag is published, so the image is pinned by digest + # (v2.3.9 of the image, MailCatcher NG 1.6.8). + image: stpaquet/alpinemailcatcher:latest@sha256:499c0eabca5e82b23d030706ba9d5b8b27bba5a5f34a43154ee5e68b07cba52c + restart: unless-stopped + # Same as the image default CMD, plus --persistence so caught mail + # survives container restarts (stored in the named volume below). + command: sh -c "mailcatcher --foreground --smtp-port=1025 --http-port=1080 --ip=0.0.0.0 --messages-limit=$$MAIL_LIMIT --persistence --no-quit" + environment: + - MAIL_LIMIT=${MAIL_LIMIT} + expose: + # SMTP: reachable from other services in the same Dokploy network + # at mailcatcher-ng:1025 (intentionally not published on the host). + - 1025 + # Web UI (routed through the domain below) + - 1080 + volumes: + - mailcatcher-data:/home/mailcatcher/.mailcatcher + healthcheck: + test: ['CMD', 'wget', '-q', '--spider', 'http://127.0.0.1:1080'] + interval: 10s + timeout: 5s + retries: 10 + +volumes: + mailcatcher-data: diff --git a/blueprints/mailcatcher-ng/mailcatcher-ng.svg b/blueprints/mailcatcher-ng/mailcatcher-ng.svg new file mode 100644 index 00000000..9ffcc2cf --- /dev/null +++ b/blueprints/mailcatcher-ng/mailcatcher-ng.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/blueprints/mailcatcher-ng/meta.json b/blueprints/mailcatcher-ng/meta.json new file mode 100644 index 00000000..814ea781 --- /dev/null +++ b/blueprints/mailcatcher-ng/meta.json @@ -0,0 +1,17 @@ +{ + "id": "mailcatcher-ng", + "name": "MailCatcher NG", + "version": "1.6.8", + "description": "MailCatcher NG runs a super simple SMTP server which catches any message sent to it to display in a web interface. Point your app's SMTP settings at mailcatcher-ng:1025 and inspect every captured email in the browser.", + "logo": "mailcatcher-ng.svg", + "links": { + "github": "https://github.com/spaquet/mailcatcher", + "website": "https://spaquet.github.io/mailcatcher/", + "docs": "https://spaquet.github.io/docker-alpine-mailcatcher/" + }, + "tags": [ + "email", + "smtp", + "development" + ] +} diff --git a/blueprints/mailcatcher-ng/template.toml b/blueprints/mailcatcher-ng/template.toml new file mode 100644 index 00000000..2a72b979 --- /dev/null +++ b/blueprints/mailcatcher-ng/template.toml @@ -0,0 +1,13 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ + "MAIL_LIMIT=50", +] +mounts = [] + +[[config.domains]] +serviceName = "mailcatcher-ng" +port = 1_080 +host = "${main_domain}"