Self-hosted email validation API. Mailsieve verifies addresses through mailboxlayer's verification endpoint, then caches, stores, and serves the results with a web UI and history.
cp config.example.yaml config/config.yaml
docker compose up -d
Open http://localhost:8080 for the UI, http://localhost:8080/api/docs for the API.
Every address renders as a signal strip — a fixed row of cells across the delivery
chain (format · mx · smtp · catch-all) and its attributes (role · free · disposable),
so each address produces a recognisable left-to-right fingerprint. The verdict sits large
in its own colour, with score as a secondary figure.

Results are stored append-only and paginated server-side. A revision badge links to the diff for any address checked more than once.

Two revisions side by side, changed fields highlighted, with a timeline of every revision — this is why the table is append-only.

Generate/rotate the API token (shown once), adjust the cache TTL, and download or restore a portable backup.

For each address Mailsieve fetches mailboxlayer's rotating request secret, hashes it with the address, and calls the verification endpoint through a rotating pool of proxies and user-agents. Results are cached in Redis, stored append-only in the database, and returned with a derived verdict.
This verification path was disclosed to mailboxlayer, who confirmed the usage is permitted.
It still depends on their endpoint's current shape, which can change without notice — the
service isolates every moving part behind one provider module and reports upstream
reachability at /api/v1/health.
proxies.source_url at
a better pool or supply your own.Results are stored append-only. Re-validating an address writes a new row only when the result has changed, so the history table is a record of what changed and when, not a log of every check. The diff view compares any two revisions.
Apache-2.0
Content type
Image
Digest
sha256:4310b37d3…
Size
88.4 MB
Last updated
about 2 months ago
docker pull techblog/mailsieve