Open Source · Reliable email sending on your infra

Lightweight HTTP email service

Stop email chaos. Spin up in minutes — no boilerplate, no SDKs.
One HTTP endpoint, per‑recipient tracking, production‑ready from day one.
Open source, deploy anywhere.

The pain today

SDK juggling, partial successes, inconsistent errors once you hit production.

A single endpoint

Deploy as a Go binary or Docker and call via HTTP from any service.

Per‑recipient clarity

Know exactly which recipients succeeded or failed with messageId and error.

Scalable

Built with Go for performance and concurrency.

Postgres logs

Track requests, responses, and errors end‑to‑end.

Multiple providers

SES today, easy to extend as you grow.

Own your email infrastructure

Mail Jack is open source (MIT License). No vendor lock-in, no hidden costs. Audit the code, modify it, deploy it anywhere you want. Full control of your data.

View on GitHub ⭐ Star on GitHub

The problem we’re solving


Without Mail Jack

  • Direct SES SDKs are verbose and environment‑sensitive
  • Hard to correlate per‑recipient success vs. failure
  • Inconsistent error shapes across libraries
  • Boilerplate for retry, logging, and auth on every service

With Mail Jack (Open Source)

  • One HTTP endpoint with a stable schema
  • Per‑recipient results (status, messageId, error)
  • JSON errors with proper HTTP status codes
  • Drop‑in: Go binary or Docker, ready for CI/CD
  • Open source – own your code, no vendor lock-in
Start fast

Getting Started

Requirements: Go 1.22+, AWS SES (verified sender/domain), PostgreSQL connection string.

Run locally

Export envs → go run ./cmd. You’re live on http://localhost:8080.

Docker

docker build -t mail-jack .
docker run -p 8080:8080 --env-file .env mail-jack

Auth

Send X-API-KEY (must match MAIL_JACK_API_KEY). Try the curl in API.

One endpoint

API

POST /send-email X-API-KEY
Copy & run locally
curl -X POST http://localhost:8080/send-email \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: $MAIL_JACK_API_KEY" \
  -d '{
    "from":"sender@example.com",
    "to":["user@example.com"],
    "subject":"Hello",
    "body":"Plain text body",
    "html":"

HTML body

" }'
Save engineering time

How it makes life easier

Less boilerplate

  • One HTTP call — no SDK juggling
  • Clear JSON errors with proper codes

Save ~1–2 days per integration

Better visibility

  • Per‑recipient status + messageId
  • Easy to search, alert, and debug

Lower MTTR during incidents

Stories

User stories

Growth team launch

“Replaced ad‑hoc SES scripts in an afternoon. Experiments hit one endpoint; failures are instantly visible.”

On‑call visibility

“Per‑recipient results isolate domain‑specific bounces without hop‑scotching logs across services.”

Platform standardization

“Standardized outbound email. No SDK drift between services; onboarding a new team takes minutes.”