Email Validation API
A high-intelligence, multi-engine email validation service built with FastAPI. Orchestrates deep SMTP checks, heuristic pre-filtering, and reputation analysis to deliver verifiable, consensus-based deliverability verdicts.
/api/v1/verify-email 1098 FastAPI + DuckDB LightGBM ML 0 Interactive Dashboard
Validate emails, manage allow/block lists, tune scoring rules, and monitor service health — all from one dashboard.
Test emails, tune scoring, and manage domain rules from one page.
This dashboard is wired to the Laravel Mail Validation API and exposes the live validation, feedback, list, scoring, root, and health endpoints.
Email validation
Submit an address to `POST /v1/filter-email`. Valid inputs also auto-run after a short debounce.
Lists
Manage allow and block rules with `GET`, `POST`, and `DELETE` calls under `/v1/lists`.
Whitelist
Current size: 0
Blacklist
Current size: 0
Disposable
Read-only view from `GET /v1/lists`.
Spam Keywords
Read-only view from `GET /v1/lists`.
Scoring
Edit the values returned by `GET /v1/scores` and persist them with `POST /v1/scores`.
1 What You Get
A unified email validation service combining multiple verification engines, Bayesian inference, and LightGBM machine learning — all running on your own infrastructure.
Unified API
Single endpoint for all verification needs. No need to orchestrate multiple services — one call returns a comprehensive verdict.
Multi-Engine Pipeline
Bloombox, syntax, MX/DNS, disposable detection, SMTP verification, Bayesian inference, and LightGBM ML — all working in concert.
ML-Powered Intelligence
LightGBM model trained on actual verification data stored in DuckDB. Continuously improving with live telemetry feedback loops.
2 Architecture
The service is fully unified into a single FastAPI backend. The legacy EmailFilter service has been decommissioned and its logic integrated into the core pipeline.
Port
1098
FastAPI backend
Database
DuckDB
data/email_validation.db
Model
LightGBM
/app/model.txt
3 Verification Engines
Each email passes through multiple specialized engines. Signals are combined using weighted scoring and machine learning to produce a final verdict.
Bloombox
<1msHigh-speed Bloom filter checks across 1M+ known disposable and invalid domains. Sub-millisecond lookups for instant pre-filtering.
Syntax Validator
<1msRFC-compliant email syntax validation. Catches malformed addresses before they reach heavier verification stages.
MX/DNS Checker
~10msReal-time mail exchanger verification. Confirms the domain has valid MX records and can accept email.
Disposable Detector
<1msIdentifies temporary and throwaway email providers using an ever-growing database of disposable email services.
Reacher SMTP
~1.2sDeep SMTP verification that connects to the mail server to confirm mailbox existence without sending an email.
Bayesian Inference
<5msStatistical probability engine that combines all signal weights to produce a unified confidence score for each validation.
LightGBM ML
~10msMachine learning model trained on real verification data. Provides nuanced deliverability predictions beyond rule-based systems.
4 Quick Start
Validate your first email with a single API call. The service runs on port 1098 and returns a comprehensive verdict with confidence scores.
curl -X POST "http://localhost:1098/api/v1/verify-email" \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com"}' {
"email": "user@gmail.com",
"verdict": {
"status": "safe",
"confidence": 0.95,
"score": 0.98,
"source": "hybrid_ml",
"recommendation": "accept",
"reasons": ["Mailbox exists", "High-trust domain age"],
"audit_log": [
{ "signal": "deliverable", "value": true, "weight": 1.4, "contribution": 0.35 }
]
},
"engines": {
"reacher": { "status": "success", "latency_ms": 1200 },
"emailfilter": { "status": "success", "latency_ms": 150 },
"bloombox": { "status": "success", "latency_ms": 10 }
},
"meta": { "request_id": "req_abc123...", "processing_time_ms": 1360 }
} 5 API Reference
Verify Email
/api/v1/verify-email Request Body
{
"email": "user@gmail.com",
"is_signup": true,
"proxy": {
"host": "your-proxy.com",
"port": 1080
}
}required — Email address to validate
is_signup
optional — Hint for signup context
proxy
optional — SMTP proxy configuration
Verdict Fields
| Field | Type |
|---|---|
status | string |
confidence | float |
score | float |
source | string |
recommendation | string |
reasons | string[] |
audit_log | array |
6 Machine Learning Pipeline
The validation engine improves over time using telemetry data stored in DuckDB. Train the model with live data and bootstrap high-quality samples for cold starts.
ML Training
Train the model using live telemetry data stored in DuckDB:
make trainData Bootstrapping
Seed the database with high-quality verification samples:
make bootstrap7 Accessing Telemetry
The system creates a DuckDB database at data/email_validation.db. Export verified leads directly via the service API.
from app.services.database import EmailValidationDB
db = EmailValidationDB("data/email_validation.db")
db.export_valid_emails("verified_leads.csv") 8 Configuration
Configure the service using environment variables. Most have sensible defaults and work out of the box.
| Variable | Default |
|---|---|
EMAILFILTER_URL | http://localhost:1099 |
REACHER_TIMEOUT_SECONDS | 30 |
RATE_LIMIT_REQUESTS | 10 |
RATE_LIMIT_WINDOW_SECONDS | 60 |
PERSIST_TO_DB | true |
LOG_EMAIL_ADDRESSES | false |
9 Available Commands
make train Train the LightGBM model using live telemetry data stored in DuckDB make bootstrap Seed the database with high-quality verification samples make logs View real-time container logs for debugging make ssh Access the running container shell for maintenance make rebuild Rebuild and restart the container with fresh configuration 10 Infrastructure Requirements
Network Access
- Port 25 outbound for SMTP probes (Reacher)
- Port 1098 exposed for the API
- Coolify: set Service Port to 1098
License
- CC-04 — Public Domain
- Free for personal and commercial use
- Maintained by the LaravelMail Team