Email validation with zero dependencies.

Check syntax, MX records, disposable domains and aliases. Free, open source, and nothing leaves your servers.

npm i @isan3/checkemail

Not using Node.js? Run it with Docker

Try:

Runs in your browser. Only the domain is looked up. Nothing is stored.

How it works

Four quick steps, cheapest first. Bad addresses stop early.

  1. Instant local checks

    Format, 9,000+ disposable domains and role inboxes like support@ are checked with no network call.

  2. DNS and mail server

    Confirms the domain exists and has MX records, so it can actually receive mail.

  3. Provider and aliases

    Spots Gmail, Outlook, Proton and more, and turns john.doe+test@gmail.com into johndoe@gmail.com.

  4. Confidence score

    Every signal adds up to a 0 to 100 score with a clear status like LIKELY or DISPOSABLE.

Zero dependencies. Zero monthly fees.

Paid email APIs see every address you send and bill per check. checkemail is a library you run yourself.

  • Private

    Addresses never leave your servers. Only the domain is looked up in DNS, and nothing is tracked.

  • Free forever

    MIT licensed. No API keys, no plans, no per-check fees.

  • No dependencies

    Uses the DNS module built into Node.js. Nothing else to install or audit.

  • Always up to date

    The disposable list is refreshed every Monday and Thursday by a GitHub Action.

Use it anywhere

Import it in JavaScript, call it over HTTP from any language, or host this page for free.

index.mjs
import { validateEmail } from '@isan3/checkemail';

const { confidence } = await validateEmail('john.doe+test@gmail.com');
console.log(confidence.status, confidence.canonical_email); // LIKELY johndoe@gmail.com

Node.js 18+ or Bun. TypeScript types included.

Questions

Does checkemail confirm that a mailbox exists?

No. checkemail never opens an SMTP connection or sends a RCPT probe. It verifies syntax, that the domain resolves in DNS, and that it publishes MX records, then scores the address. LIKELY means the domain can receive mail; it does not prove the individual mailbox exists.

How does checkemail detect disposable email addresses?

It matches the domain exactly against the community-maintained disposable-email-domains blocklist (9,000+ domains). The package republishes with a fresh copy every Monday and Thursday via GitHub Actions. A disposable match returns status DISPOSABLE with score 0 before any DNS lookup.

How does checkemail handle Gmail aliases like john.doe+test@gmail.com?

It strips the +tag, removes dots from the local part and folds googlemail.com into gmail.com. john.doe+test@gmail.com returns alias_status: ALIAS_CONFIRMED and canonical_email: johndoe@gmail.com, so you can detect repeat signups.

Which email providers can checkemail identify?

Gmail, Microsoft consumer (Outlook, Hotmail, Live, MSN), iCloud, Proton Mail, Yahoo, Fastmail, Zoho Mail, Yandex Mail and Google Groups from the domain. Custom domains hosted on Google Workspace or Microsoft 365 are detected from their MX and SPF records.

Can I use checkemail from Python, Go, Java, .NET or PHP?

Yes. Run the Docker image (docker run -p 3000:3000 saiakashneela/checkemail) and call GET /validate?email= from any HTTP client. The response is the same JSON the Node.js package returns.

Can checkemail run in the browser without a server?

Yes. The demo on checkemail.dev runs the same checks directly in the browser and resolves DNS over HTTPS through Cloudflare's 1.1.1.1. The whole site is one static HTML file you can host for free on Cloudflare Pages or GitHub Pages.

What does the checkemail confidence score mean?

Any status other than LIKELY scores 0. Otherwise points are summed: +20 domain resolves, +20 MX records, +20 not disposable, +20 no alias signals (+10 alias possible, -5 alias confirmed), +10 not a role inbox. A clean personal address scores 90.

Is checkemail free for commercial use?

Yes. checkemail is MIT licensed, has no API keys, no per-check pricing and no usage tiers.