How to Validate 10,000 Email Domains Without Sending a Single Email
Email list validation is usually done at the worst possible time: right before a campaign, when everyone is already nervous. Sending test emails to 10,000 addresses is slow, damages sender reputation, and tells you very
Email list validation is usually done at the worst possible time: right before a campaign, when everyone is already nervous.
Sending test emails to 10,000 addresses is slow, damages sender reputation, and tells you very little about whether the domain itself can receive mail.
A better first pass is DNS-level validation. It will not prove that a mailbox exists, but it catches the expensive mistakes before you send anything.
What to check
For each domain, check:
- syntax and IDN normalization
- MX records
- null MX
- disposable or role-account domains
- recently registered or parked domains
- known blacklist status
- SPF, DKIM and DMARC presence
These checks do not replace double opt-in. They stop you from sending to domains that clearly cannot or should not receive mail.
Normalize before checking
A file that looks clean often contains duplicates, trailing spaces, uppercase domains, and addresses pasted from spreadsheets.
const normalize = (value) =>
value
.trim()
.toLowerCase()
.replace(/^mailto:/, "")
.replace(/[),.;]+$/, "");
const domainOf = (email) => email.split("@").pop();
const rows = rawInput
.split(/\r?\n/)
.map(normalize)
.filter((email) => email.includes("@"));
const uniqueDomains = [...new Set(rows.map(domainOf))];
Deduplicate by domain before doing DNS work. If 10,000 addresses belong to 700 domains, you have 700 checks, not 10,000.
Use the bulk tool first
For a one-off cleanup, the browser-based bulk checker is faster than writing a script:
https://mailers.email/tools/bulk-email-domain-check/
Paste the domains, review MX and authentication status, and export the result. The tool runs in the browser and does not require an account.
Use the API for spot checks
The public scan API is intentionally small:
curl -s https://api.mailers.email/v1/scan \
-H 'content-type: application/json' \
-d '{"domain":"example.com"}'
Limits:
- 60 requests per hour per IP
- 24-hour cache per domain
- no API key
- one domain per request
Do not try to push 10,000 domains through a 60/hour endpoint. Use the bulk tool for the list, then use the API for a sample or for CI checks.
Classify the result
Do not reduce everything to βvalidβ and βinvalidβ. Use at least four buckets:
- Deliverable β MX exists and authentication looks sane.
- Risky β role account, disposable domain, new domain, or authentication missing.
- Undeliverable β no MX or null MX.
- Unknown β DNS timeout or ambiguous response.
Risky addresses are often the most valuable segment: they are the ones you should suppress or verify with double opt-in first.
What DNS validation cannot do
It cannot prove that [email protected] exists. Only the receiving server knows that, and probing it with SMTP can get your IP blocked.
Use DNS validation to protect your sender reputation, not to promise a perfect list.
Bulk checker: https://mailers.email/tools/bulk-email-domain-check/
Domain scanner: https://mailers.email/scan/
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.