Sign inSign up

xuxuclassmate/custom-mail

By xuxuclassmate

•Updated 1 day ago

Private Brevo mail console — compose, preview, attachments, and send history

Image
0

570

xuxuclassmate/custom-mail repository overview

⁠custom-mail

Private Brevo mail console — compose, preview, attachments, and send history

Version Docker Pulls

GitHub⁠ • Docker Hub⁠ • Docs⁠ • Live demo⁠


⁠What It Does

Custom Mail is a self-hosted outbound mail workspace. Run it locally in Docker to try the UI, or deploy the same Rust Worker to Cloudflare for production.

  • Compose to multiple recipients with an address book
  • Markdown body with HTML preview before send
  • Attachments up to 8 files · 8 MB each · 15 MB total
  • Send history with detail view (desktop + mobile)
  • Session login, login rate limit, HttpOnly cookies
  • Delivered through Brevo — no mail server to maintain
  • Runtime: Rust Cloudflare Worker (workers-rs → WASM) inside a slim image

⁠Docker Quick Start

⁠1. Pull the image
docker pull xuxuclassmate/custom-mail:latest

Also on GHCR: ghcr.io/innonestx/custom-mail:latest

⁠2. Set your secrets

You need at least a console password. Add a Brevo API key when you want to actually send mail.

export ADMIN_PASSWORD='choose-a-strong-password'
export BREVO_API_KEY='xkeysib-...'   # optional for UI-only testing
export PORT=8787                        # optional, default 8787

Get a Brevo key from Brevo → SMTP & API⁠.

⁠3. Run the container

Foreground (good for a quick try):

docker run --rm -p 8787:8787 \
  -e ADMIN_PASSWORD="$ADMIN_PASSWORD" \
  -e BREVO_API_KEY="$BREVO_API_KEY" \
  xuxuclassmate/custom-mail:latest

Background:

docker run -d \
  --name custom-mail \
  -p 8787:8787 \
  -e ADMIN_PASSWORD="$ADMIN_PASSWORD" \
  -e BREVO_API_KEY="$BREVO_API_KEY" \
  xuxuclassmate/custom-mail:latest

Open http://localhost:8787⁠ and sign in with ADMIN_PASSWORD.

Quick health check:

curl -s http://localhost:8787/api/health
# {"ok":true,"runtime":"rust","service":"mail",...}

⁠Docker Compose

Clone the repo if you want the bundled docker-compose.yml:

git clone https://github.com/InnoNestX/Custom-Mail.git
cd Custom-Mail
export ADMIN_PASSWORD='choose-a-strong-password'
export BREVO_API_KEY='xkeysib-...'
docker compose up -d

Stop the service:

docker compose down

⁠Environment Variables

VariableDefaultDescription
ADMIN_PASSWORD(required)Login password for the mail console
BREVO_API_KEYemptyBrevo API key (xkeysib-…). UI works without it; send fails until set
PORT8787Port Wrangler listens on inside the container

The image sets ALLOW_ANY_HOST=1 so local Docker works without tweaking Host headers.

⁠Branding & config

Product copy, colors, login text, and address book live in config/mail.json inside the image. For production on Cloudflare, edit that file in the repo and redeploy — see the config guide⁠.

⁠Image Tags

  • xuxuclassmate/custom-mail:latest
  • xuxuclassmate/custom-mail:0.2.0
  • ghcr.io/innonestx/custom-mail:latest
  • ghcr.io/innonestx/custom-mail:0.2.0

⁠OpenClaw

clawhub install custom-mail

Tag summary

Content type

Image

Digest

sha256:3aa991536…

Size

141.7 MB

Last updated

1 day ago

docker pull xuxuclassmate/custom-mail