Adds a template for MailCatcher NG (spaquet/mailcatcher), a lightweight SMTP catcher for development: it runs a simple SMTP server that captures every message sent to it and displays them in a web UI.
Image: stpaquet/alpinemailcatcher (the official Docker image from spaquet/docker-alpine-mailcatcher, v2.3.9, MailCatcher NG 1.6.8, Alpine 3.24.1). The registry only publishes a latest tag, so the image is pinned by digest (sha256:499c0e...) for reproducible deploys.
SMTP port 1025 is internal only (expose, not published on the host): other apps in the same Dokploy project send mail to mailcatcher-ng:1025; the web UI (1080) is routed through the template domain.
Persistence enabled: the default image CMD keeps mail in memory only, so the template overrides the command with the image's own documented --persistence flag and mounts a named volume at /home/mailcatcher/.mailcatcher, so captured mail survives restarts/redeploys.
MAIL_LIMIT=50 exposed as an env var (image default) to cap stored messages.
Healthcheck via busybox wget --spider on the UI port.
Logo: official SVG from the upstream repo (website_src/public/favicon.svg).
Deploy test (demo instance)
Deployed on a Dokploy instance from this exact blueprint:
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/Dokploy/templates/pull/1014
**Author:** [@Siumauricio](https://github.com/Siumauricio)
**Created:** 7/14/2026
**Status:** ✅ Merged
**Merged:** 7/14/2026
**Merged by:** [@Siumauricio](https://github.com/Siumauricio)
**Base:** `canary` ← **Head:** `feat/mailcatcher-ng`
---
### 📝 Commits (1)
- [`b7c2d6c`](https://github.com/Dokploy/templates/commit/b7c2d6c35d73e943a737eb3fe22e587474a353ee) feat: add MailCatcher NG template
### 📊 Changes
**4 files changed** (+67 additions, -0 deletions)
<details>
<summary>View changed files</summary>
➕ `blueprints/mailcatcher-ng/docker-compose.yml` (+27 -0)
➕ `blueprints/mailcatcher-ng/mailcatcher-ng.svg` (+10 -0)
➕ `blueprints/mailcatcher-ng/meta.json` (+17 -0)
➕ `blueprints/mailcatcher-ng/template.toml` (+13 -0)
</details>
### 📄 Description
## What
Adds a template for **MailCatcher NG** ([spaquet/mailcatcher](https://github.com/spaquet/mailcatcher)), a lightweight SMTP catcher for development: it runs a simple SMTP server that captures every message sent to it and displays them in a web UI.
Closes #747
## Decisions
- **Image**: `stpaquet/alpinemailcatcher` (the official Docker image from [spaquet/docker-alpine-mailcatcher](https://github.com/spaquet/docker-alpine-mailcatcher), v2.3.9, MailCatcher NG 1.6.8, Alpine 3.24.1). The registry only publishes a `latest` tag, so the image is **pinned by digest** (`sha256:499c0e...`) for reproducible deploys.
- **SMTP port 1025 is internal only** (`expose`, not published on the host): other apps in the same Dokploy project send mail to `mailcatcher-ng:1025`; the web UI (1080) is routed through the template domain.
- **Persistence enabled**: the default image CMD keeps mail in memory only, so the template overrides the command with the image's own documented `--persistence` flag and mounts a named volume at `/home/mailcatcher/.mailcatcher`, so captured mail survives restarts/redeploys.
- `MAIL_LIMIT=50` exposed as an env var (image default) to cap stored messages.
- Healthcheck via busybox `wget --spider` on the UI port.
- Logo: official SVG from the upstream repo (`website_src/public/favicon.svg`).
## Deploy test (demo instance)
Deployed on a Dokploy instance from this exact blueprint:
```
deploy: done (10s)
✅ mailcatcher-ng:1080 → HTTP 200 «MailCatcher NG»
```
`node build-scripts/generate-meta.js --check` passes (477 templates validated).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/Dokploy/templates/pull/1014
Author: @Siumauricio
Created: 7/14/2026
Status: ✅ Merged
Merged: 7/14/2026
Merged by: @Siumauricio
Base:
canary← Head:feat/mailcatcher-ng📝 Commits (1)
b7c2d6cfeat: add MailCatcher NG template📊 Changes
4 files changed (+67 additions, -0 deletions)
View changed files
➕
blueprints/mailcatcher-ng/docker-compose.yml(+27 -0)➕
blueprints/mailcatcher-ng/mailcatcher-ng.svg(+10 -0)➕
blueprints/mailcatcher-ng/meta.json(+17 -0)➕
blueprints/mailcatcher-ng/template.toml(+13 -0)📄 Description
What
Adds a template for MailCatcher NG (spaquet/mailcatcher), a lightweight SMTP catcher for development: it runs a simple SMTP server that captures every message sent to it and displays them in a web UI.
Closes #747
Decisions
stpaquet/alpinemailcatcher(the official Docker image from spaquet/docker-alpine-mailcatcher, v2.3.9, MailCatcher NG 1.6.8, Alpine 3.24.1). The registry only publishes alatesttag, so the image is pinned by digest (sha256:499c0e...) for reproducible deploys.expose, not published on the host): other apps in the same Dokploy project send mail tomailcatcher-ng:1025; the web UI (1080) is routed through the template domain.--persistenceflag and mounts a named volume at/home/mailcatcher/.mailcatcher, so captured mail survives restarts/redeploys.MAIL_LIMIT=50exposed as an env var (image default) to cap stored messages.wget --spideron the UI port.website_src/public/favicon.svg).Deploy test (demo instance)
Deployed on a Dokploy instance from this exact blueprint:
node build-scripts/generate-meta.js --checkpasses (477 templates validated).🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.