Self-hosted bulk email verification β free forever. No paid APIs.
Syntax Β· MX records Β· live SMTP dialog Β· CSV export
See the portfolio demos page for project previews. Run locally and capture with demo data:
npm start
# Open http://localhost:5000 β use sample emails only| Paid SaaS (Hunter, etc.) | This app | |
|---|---|---|
| Cost | πΈ Per email | β $0 |
| Data privacy | Sent to third parties | β Stays on your PC |
| SMTP proof | Yes | β Yes (truemail-go / Reacher) |
| Bulk CSV | Yes | β Any column |
- π Single verify β verify-email.org style checklist + SMTP server text
- π Bulk CSV / XLSX β finds emails in any column
- β Valid-only export β download clean list with original columns
- π Resume bulk jobs β switch tabs; open Bulk Verify again to continue
- π JWT auth + validation history
- π Dark mode
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser β Node.js + Express (:5000) UI + API β
β β β
β ββββββββββββ΄βββββββββββ β
β βΌ βΌ β
β truemail-go (:8080) Reacher Docker (:8081) optional β
β SMTP + MX + 550 text Industry-grade (Gmail-safe) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Layer | Technology |
|---|---|
| Frontend | HTML5, Bootstrap 5, JavaScript |
| API | Node.js, Express, JWT |
| Database | MongoDB or in-memory (dev) |
| Verifier A | truemail-go (Go) β built-in |
| Verifier B | Reacher (Rust/Docker) β optional, recommended for huge lists |
| Misc lists | AfterShip email-verifier (disposable / role) |
- Node.js 18+
- Go 1.22+ (for truemail-go)
- Docker Desktop (optional, recommended)
git clone https://github.com/mafzalkalwardev/bulk-email-verifier.git
cd bulk-email-verifier
cp .env.example .env
npm installnpm startOpen http://localhost:5000 β register β verify emails.
docker compose up -d
npm startIn .env:
VERIFIER_ENGINE=autoauto uses truemail-go first (fast). Reacher is used if Go is down. Set VERIFIER_ENGINE=reacher to force Docker engine.
| Engine | Speed | Gmail | When to use |
|---|---|---|---|
| truemail-go | β‘ ~10β20s | Good SMTP 550 | Default β no Docker |
| Reacher | π’ can be slow | Headless checks | Huge lists, hard providers |
Reacher timeout? Gmail via Docker can exceed 60s. The app falls back to truemail-go automatically.
See docs/ENGINES.md for details.
| Column | Meaning |
|---|---|
domain_valid |
Syntax + MX OK |
mailbox_verified |
yes / no / no_smtp |
valid |
yes only when SMTP confirms mailbox |
- http://localhost:5000 β web app (only URL for browser)
:8080/:8081β internal APIs (do not open for UI)
| Variable | Default | Description |
|---|---|---|
PORT |
5000 |
Web UI |
JWT_SECRET |
β | Change in production |
VERIFIER_ENGINE |
auto |
auto | truemail | reacher |
GO_VERIFIER_URL |
http://localhost:8080 |
truemail-go |
REACHER_URL |
http://localhost:8081 |
Reacher Docker |
REACHER_TIMEOUT_MS |
60000 |
Reacher timeout before fallback |
BULK_CONCURRENCY |
3 |
Parallel emails per batch |
MONGO_URI |
empty | In-memory DB if empty |
bulk-email-verifier/
βββ backend/go/ # truemail-go API
βββ lib/ # Vendored Go libraries
βββ public/ # Web UI
βββ controllers/ # REST handlers
βββ utils/ # CSV parser, engines
βββ docker-compose.yml # Reacher (optional)
βββ docs/ # REQUIREMENTS, ENGINES
git add .
git commit -m "feat: self-hosted bulk email verifier"
git branch -M main
git remote add origin https://github.com/mafzalkalwardev/bulk-email-verifier.git
git push -u origin mainNever commit .env (already in .gitignore).
| Issue | Fix |
|---|---|
ECONNREFUSED on register |
Wait for In-Memory MongoDB ready before signing up |
| Reacher timeout | Uses truemail-go fallback; or set VERIFIER_ENGINE=truemail |
| Bulk lost on tab switch | Return to Bulk Verify β job resumes from sessionStorage |
All no_smtp |
Port 25 blocked β try Docker Reacher |
docker not found |
Install Docker Desktop, restart PC |
This project is intended for lawful, permission-based email workflows only. Users must follow CAN-SPAM, GDPR, and other applicable anti-spam and privacy laws, SMTP provider terms, opt-out/unsubscribe requirements, and recipient consent rules.
Do not use this software for phishing, spam, unsolicited bulk mail, purchased lists without permission, or deceptive sender identity. Verify only contacts you are authorized to validate or contact.
The maintainers are not responsible for misuse of this software.
Status: Client-ready Β· self-hosted Β· demo data recommended for screenshots
MIT β LICENSE. Third-party code in lib/ has its own licenses.
β Star this repo if it saved you from paid verification APIs
Made for developers who need real SMTP checks without a subscription.