A self-hosted mail catcher for local development and testing.
Eternals Cloud Mailer is an email testing tool for developers. It captures emails sent by your application during development so you can inspect them in a clean web UI. Point your app's SMTP config at Eternals Cloud Mailer, and every outgoing email lands in your local inbox — safely, instantly.
docker run -d \
--name ec-mailer \
--restart always \
-p 8502:8502 \
-p 1025:1025 \
-e POSTGRES_URL=postgresql://username:password@hostname:5432/mailer \
-v mailer:/app/attachments \
eternalscloud/mailer:latest
Once the container is running:
http://localhost:8502 in your browserlocalhost:1025Configure your application's SMTP settings to point to Eternals Cloud Mailer:
| Setting | Value |
|---|---|
| Host | localhost (or container name in Docker networks) |
| Port | 1025 |
const transporter = nodemailer.createTransport({
host: 'localhost',
port: 1025,
secure: false
});
import smtplib
with smtplib.SMTP('localhost', 1025) as server:
server.sendmail(sender, recipient, message)
err := smtp.SendMail(
"localhost:1025",
nil,
sender,
[]string{recipient},
[]byte(message),
)
| Variable | Required | Description |
|---|---|---|
POSTGRES_URL | Yes | PostgreSQL connection URL (e.g., postgresql://username:password@hostname:5432/mailer) |
POSTGRES_URL format:
username / password — PostgreSQL credentialshostname — database host or Docker service name (e.g. db in Compose, localhost on the host)5432 — default PostgreSQL portmailer — database name| Port | Description |
|---|---|
8502 | Web UI and REST API |
1025 | SMTP server |
| Path | Description |
|---|---|
/app/attachments | Mail attachment storage |
Important: Mount a volume to /app/attachments to persist email attachments across container restarts.
A complete example with PostgreSQL database:
services:
ec-mailer:
image: eternalscloud/mailer:latest
container_name: ec-mailer
restart: always
ports:
- "8502:8502"
- "1025:1025"
environment:
- POSTGRES_URL=postgresql://username:password@hostname:5432/mailer
volumes:
- mailer:/app/attachments
depends_on:
- db
db:
image: postgres:18.4
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: mailer
volumes:
- postgres:/var/lib/postgresql/data
volumes:
mailer:
postgres:
In this stack, set hostname to db (the Postgres service name below). Use credentials that match POSTGRES_USER / POSTGRES_PASSWORD on the db service.
Run with:
docker compose up -d
This project is licensed under the MIT License — see the LICENSE file for details.
Catch mail. Inspect it. Ship with confidence.
Made with care by Eternals Cloud
Content type
Image
Digest
sha256:82b35ffb0…
Size
202.7 MB
Last updated
5 months ago
docker pull eternalscloud/mailer