Bulk email verifier for Windows, local-first

Catch bad email addresses and spamtraps before you hit send.

Nine verification stages, a 24-signal spamtrap engine and six blocklists run on your own PC, up to 1,000,000 rows per run. Nothing is uploaded, and no message is ever sent.

  • No payment for the trial
  • One EXE, nothing to install
  • Pay with crypto, key issued automatically
Verifying sample list Sample data
Checked
6
Passed
1
Risky
2
Invalid
1
Traps
1
  1. olivia.hart@sample-mail.com Passed mx ok · spf · dmarc
  2. noreply@northwind-sample.com Risky role_address · no-reply
  3. kevin@gnail.com Risky domain_typo_possible → gmail.com
  4. spamtrap@lists.sample-isp.net Honeypot honeypot_local_pattern +8
  5. ana..silva@sample-mail.com Invalid syntax_invalid
  6. Olivia.Hart@sample-mail.com Duplicate duplicate_email
Illustrative run with invented addresses. Real runs stream up to 1,000,000 rows on your PC.
  • 1,000,000rows per run
  • 24spamtrap signals
  • 6blocklists
  • 0messages sent
  • runs on your PC

The pipeline

Nine stages, in the order they run

The first three stop an address as soon as they match. The rest collect evidence, and the verdict ladder weighs it at the end. Pick a stage to see what it checks.

  1. Stage 1 of 9 Stops the address on a match

    Syntax & parsing

    Is this a well-formed address at all?

    • Full address grammar and length limits; Name <addr> forms and quoted local parts
    • International domains converted to punycode; non-ASCII local parts marked unknown, never invalid
    • Plus-addressing detected (alice+news@)
    • Reserved and special-use names rejected: .test .local .invalid .onion .internal .corp example.com

    Reason codes

    syntax_invalid reserved_tld plus_addressed idn_domain

    Example

    sam..lee@mail.test syntax_invalid Invalid
  2. Stage 2 of 9 Stops the address on a match

    Duplicates

    Seen this one already?

    • Case-insensitive; the first occurrence keeps the verdict and later copies point back to it
    • Settled before any network check runs, so a repeated address never costs a lookup
    • Optional: Gmail dots and +tags can count as the same address, so j.smith+news@gmail.com matches jsmith@gmail.com (off by default)

    Reason codes

    duplicate_email

    Example

    Ana.Silva@Company.com duplicate_email Duplicate
  3. Stage 3 of 9 Stops the address on a match

    Your rules

    Addresses you have decided never to mail.

    • Blocked list: a bare word blocks a whole TLD, a domain also covers its subdomains, an entry with @ blocks one address
    • Domain-zone mode: allow only certain TLDs, or block certain TLDs
    • Optional exclusion of free consumer providers
    • Evidence columns in your own file: a hard bounce, complaint, unsubscribe or withdrawn consent files the address under filtered before any lookup

    Reason codes

    blocked_domain_or_address domain_zone_blocked free_provider_excluded evidence_hard_bounce

    Example

    buyer@shop.xyz domain_zone_blocked Filtered
  4. Stage 4 of 9 Collects evidence for the verdict

    Heuristics

    Warnings, never a hard verdict on their own.

    • Disposable providers (1,037 domains) and free providers (373)
    • Risky role mailboxes: 327 names in 7 kinds (no-reply, system, abuse and security, legal and privacy, billing, team-wide lists, list and unsubscribe addresses), plus numbered and compound forms such as billing2 and noreply-alerts
    • Business inboxes people read (351 names in many languages, such as info@, sales@ and support@, and forms like sales-de) pass and only get a “Team inbox” tag
    • Lookalike domains that use Cyrillic or Greek letters to imitate a brand (раypal.com)
    • Typo detection: 567 known typo domains plus edit-distance matching against 86 major providers, with a suggested fix (gnail.com → gmail.com)
    • Placeholders such as none@, unknown@ and test@test.com
    • Domain shape: uncommon TLD, one-character or 30+ character name, all digits, many hyphens, no vowels
    • Local-part shape: very long, long digit runs, repeated characters, all digits, many separators, throwaway keywords, very short

    Reason codes

    disposable_provider role_address role_contact domain_typo_possible homoglyph_lookalike_domain placeholder_address

    Example

    maria@gnail.com domain_typo_possible Risky
  5. Stage 5 of 9 Collects evidence for the verdict

    DNS mail routing

    Can this domain receive mail? Real lookups from your own computer.

    • MX records, RFC 7505 null MX, fallback to the domain’s own address when there is no MX, non-existent domains
    • Checks that the published mail servers actually resolve; servers that point at private or loopback addresses mark the address risky
    • A “domain does not exist” answer is checked with a second public DNS resolver before the address is called invalid; if the two disagree, it is unknown
    • Shows the mail provider behind each domain, such as Google Workspace, Microsoft 365 or Proofpoint
    • Built-in DNS client: UDP and TCP, your Windows resolvers, slow resolvers set aside automatically, DNS-over-HTTPS fallback, shared cache
    • A failed lookup is “unknown”, never “invalid”

    Reason codes

    domain_not_found null_mx_domain no_mail_records mx_records_unresolvable mx_nonpublic_address dns_lookup_failed

    Example

    jo@no-such-domain-4821.com domain_not_found Invalid
  6. Stage 6 of 9 Collects evidence for the verdict

    Domain authentication

    How seriously does the domain run its mail?

    • SPF, including a permissive +all that authorises anyone
    • DMARC policy (none, quarantine, reject)
    • MTA-STS enforcement and BIMI

    Reason codes

    no_spf_policy no_dmarc_policy spf_all_permissive dmarc_reject_policy

    Example

    team@sample-startup.io dmarc_reject_policy Passed
  7. Stage 7 of 9 Collects evidence for the verdict

    Mail-server blocklists

    Is the domain’s mail server known for spam?

    • Each domain’s mail-server IPs checked against 6 public blocklists: Spamhaus, SpamCop, PSBL, DroneBL, SpamEatingMonkey, Mailspike
    • Looked up once per server and shared across the whole run, so a million addresses on one provider cost one lookup
    • A listed server marks the address risky; a blocklist that refuses to answer is recorded as “not checked”, never as clean

    Reason codes

    dnsbl_listed_mx_ip dnsbl_clean dnsbl_not_checked

    Example

    promo@sample-bulkmailer.net dnsbl_listed_mx_ip Risky
  8. Stage 8 of 9 24 signals, one score

    Spamtrap engine

    Would mailing this get your sending domain blocklisted?

    • 24 independent signals, each worth 0 to 10 points, added into one score
    • A score of 4 or more is medium and 8 or more is high; both are quarantined as honeypot. Low scores are shown as warnings only
    • Known trap addresses are quarantined even when the rest of the engine is switched off
    • List-wide checks: addresses next to planted trap names on the same domain, and domains whose addresses are almost all machine-made, are marked risky (never removed on that alone)

    Reason codes

    known_honeypot_address honeypot_local_pattern obfuscated_trap_local user_honeypot_domain honeypot_quarantined

    Example

    spamtrap@lists.example-isp.net honeypot_local_pattern Honeypot
    All 24 signals and their points
  9. Stage 9 of 9 Optional · off by default

    SMTP mailbox probing

    Does this exact mailbox exist?

    • Asks the mail server about the recipient (RCPT TO) and hangs up before any message could be sent
    • Tests a random address first to spot catch-all servers that accept everyone
    • Greylisting retried, a delay between probes to the same domain, and an allow-list of domains you may probe
    • Three routes: direct to the domain’s MX, your own relay (10 provider presets, port and encryption auto-detected), or this computer’s mail server

    Reason codes

    smtp_rcpt_accepted smtp_rcpt_rejected catch_all_domain smtp_probe_inconclusive

    Example

    old.account@sample-corp.com smtp_rcpt_rejected Invalid
    Three ways to connect

The full deep dive on every method

Spamtrap radar

24 spamtrap signals added into one score

Mailing one spamtrap can get your sending domain blocklisted. Each signal that fires adds its points: 4 is medium and 8 is high, and both are quarantined out of your send list automatically. Hover a dot, or select a few to build a score.

The radar view needs JavaScript. Every signal and its points are listed alongside.

  • 1 to 3 points · lowWarning only; the address stays in your send list.
  • 4 to 7 · mediumQuarantined as honeypot.
  • 8+ · highQuarantined. Any single signal worth 8 to 10 points gets here alone.

Intelligence lists

Known traps, operators and your own file

  • Known trap address 10 pts
    known_honeypot_address

    The exact address is on the bundled list of 989 known traps (or your own list). These are traps that look like ordinary people.

  • Trap or blocklist domain 10 pts
    user_honeypot_domain

    The domain is on the trap-domain list: 339 bundled trap networks, blocklist zones, sinks and reserved names, plus any you add.

  • Trap-operator domain 10 pts
    known_honeypot_domain

    The domain belongs to an organisation that publicly runs spamtraps or honeytokens.

  • Anti-abuse organisation 0 pts
    reputation_service_domain

    One of 432 blocklist operators, CERTs and mail-security vendors. Recorded as evidence only, because these domains also have ordinary staff mailboxes.

  • Spamtrap in your file 10 pts
    evidence_spamtrap

    Your own file marks the address as a spamtrap (a spamtrap or mailbox status column). Read only when the file has such a column.

Naming

What operators call their traps

  • Trap local part 8 pts
    honeypot_local_pattern

    The part before the @ is a trap name (spamtrap, honeypot, sinkhole, seed list…) from 250 names and 16 naming patterns, tuned so real surnames like Trapp or Honeycutt pass. Separator forms such as honey.pot and sink.hole count too.

  • Trap word spelt with digits 4 pts
    obfuscated_trap_local

    The part before the @ is a trap word written with digits in place of letters, such as sp4mtr4p or h0neyp0t.

  • Trap word in the domain 6 pts
    honeypot_domain_pattern

    The domain contains a trap word as a whole label or hyphenated part, e.g. spamtrap.example.net or mail-sinkhole.org.

  • Digit-spelt trap word in the domain 2 pts
    obfuscated_trap_domain

    A label of the domain is a trap word written with digits in place of letters, such as h0neyp0t or s1nkh0le.

  • Trap subdomain label 5 pts
    honeypot_subdomain_label

    The leftmost label of a subdomain is a collector name (trap, sinkhole, canary). Only the first label counts, because that is where operators put it.

  • Role & recycled-trap target 2 pts
    role_trap_hybrid

    A role mailbox that is also a classic recycled-trap target (abuse@, postmaster@). Deliberately weak: these exist on legitimate domains too.

Machine-made

Random tokens and bot patterns

  • UUID local part 4 pts
    uuid_local

    The part before the @ is a bare UUID, a common per-trap identifier.

  • Hash local part 3 pts
    hex_hash_local

    A long hexadecimal string: an MD5, SHA-1 or similar digest used as a per-recipient token.

  • Disposable + another signal 3 pts
    disposable_trap_combo

    A disposable-mailbox domain that has already scored on another signal. A disposable domain alone never triggers this.

  • High-entropy local part 2 pts
    high_entropy_local

    A long local part with high randomness and no vowel pair: the shape of a machine-generated address.

  • Keyboard walk or bot shape 2 pts
    bot_keyboard_local

    Contains qwerty, asdfgh, 123456 or an implausible run of consonants, typical of bot-generated sign-ups.

DNS routing needs DNS

Where the domain’s mail actually goes

  • Trap or sinkhole mail server 6 pts
    honeypot_mx_pattern

    An MX host names a trap operator or points at a sinkhole such as localhost, 127.0.0.1 or a bare dot (60 known hostname markers).

  • Contradictory null MX 2 pts
    malformed_null_mx

    A null MX (“this domain accepts no mail”) published next to real mail servers: usually a collector, not a mail system.

  • Parked domain that takes mail 3 pts
    parked_domain_mail

    The domain is parked with a domain-parking company (its nameservers or mail servers belong to one), yet it accepts mail. Parked domains are where recycled and typo traps live.

  • No MX record 1 pt
    implicit_mx_anomaly

    Mail falls back to the domain’s own address because no MX exists. Common on small real domains, so it is worth a single point.

Zone fingerprint needs DNS

How the whole domain is set up

  • Trap marker in TXT or SPF 8 pts
    txt_honeypot_marker

    A DNS text record literally says spam trap, honeypot, sinkhole or do-not-send (55 phrases, matched as whole words).

  • Trap-operator nameservers 6 pts
    ns_sinkhole

    The domain’s nameservers belong to a trap or blocklist operator, so the whole zone is under their control.

  • Mail-only domain 3 pts
    mail_only_domain

    The domain receives mail but has no website at all. Fires only when both lookups gave a definite answer.

  • Receive-only SPF 2 pts
    spf_all_fail_with_mx

    The domain accepts mail, yet its SPF record is exactly v=spf1 -all: it says it never sends anything, a posture typical of a collector.

Try it

Put an address through the pipeline

Type any address and watch it move stage by stage to a verdict, with the reason codes the app would write.

Check one address with the in-browser sample rules

Nothing you type here leaves your browser.

Or try a sample:

Runs in your browser with a sample of the rules; the app also checks DNS, blocklists and SMTP.

  1. Syntax waiting
  2. Duplicates waiting
  3. Your rules waiting
  4. Heuristics waiting
  5. DNS routing waiting
  6. Authentication waiting
  7. Blocklists waiting
  8. Spamtraps waiting
  9. SMTP probe waiting

Enter an address or pick a sample to watch it move through the stages.

Seven verdicts

Exactly one status for every address

Every address lands in exactly one of passed risky invalid unknown filtered duplicate honeypot. Each comes with a score from 0 to 100, a reason code and a plain-English explanation.

When checks disagree, the stronger verdict wins

  1. Invalid cannot receive mail
  2. Honeypot spamtrap, quarantined
  3. Unknown a check could not finish
  4. Risky deliverable, but flagged
  5. Passed safe to send

Duplicate and Filtered are settled first, before any network check runs.

Local vs pay-per-credit

A flat subscription instead of per‑address credits

Cloud verifiers charge for every address you check: roughly $37 to $80 for 10,000 and $550 to $3,000 for a million, and your list has to be uploaded to their servers. Dpunk runs the checks on your own computer for one flat monthly price, with as many runs as you like: up to 100,000 addresses per run on Essential and up to 1,000,000 on Pro and Enterprise.

  • No per-address fees or credit packs for the checks that run on your PC
  • Your list stays on your computer. The only exception is mailbox checks you choose to run on the Dpunk probe server: those addresses are sent over an encrypted connection and deleted after the check.
  • Mailbox checks (SMTP) run on the Dpunk probe server with a monthly allowance on Pro and Enterprise, or from your own network if it allows outbound port 25, or through a mail server on your PC (Enterprise). A mailbox with no answer is shown as unknown (not confirmed), never as passed. From a network that blocks port 25, those checks show unknown, and every other check still runs.
Cost by monthly volume
Addresses per monthCloud (typical)Cloud per emailDpunk
10,000 $37 to $80 $0.0037 to $0.008 $19 a month
100,000 $150 to $650 $0.0015 to $0.0065 $19 a month
1,000,000 $550 to $3,000 $0.00055 to $0.003 $19 a month

Rounded from public list prices of popular cloud verifiers in 2026 for one-off credit packs. One credit checks one email. Prices vary by provider, plan and volume.

Everything else

Built for real lists, from import to export

Load messy files and export clean send lists. The evidence for every decision is one click away.

Import anything

  • Paste text or drop a .txt, .csv or .tsv file: 100,000 rows per run on Essential, 1,000,000 on Pro and Enterprise
  • Addresses are picked out of messy text, logs and Name <addr> lists
  • Delimiter, header row and email column detected automatically
  • Evidence columns such as hard_bounce, complaint, unsubscribed, spamtrap, consent, last_opened or list_source are read when your CSV has them

Live run control

  • Results stream in live as each address settles
  • Pause, resume or stop and keep what has been checked so far
  • Adjustable DNS timeout and parallel checks (up to 24, or 128 on Enterprise)

Evidence for every row

  • Clickable status tiles filter the table
  • Filter by TLD, text, tag and minimum score
  • Click any row: MX records, SPF/DMARC, every trap signal with its points, blocklist hits, the SMTP conversation

Exports with scopes

  • CSV (Excel-ready, protected against formula injection) and TXT on every plan
  • JSON, plus ZIP organised by status, TLD, tag and original order with honeypots/ and clean/ folders, on Pro and Enterprise
  • Scopes: everything, clean send list, passed only, spamtraps only, or any single status

Editable lists

  • Edit the trap, disposable, free-provider, risky-role and business-inbox lists on Pro and Enterprise
  • Add your own trap domains and addresses on top of the bundled lists, or replace them
  • Your own blocked list and domain-zone policy on every plan
  • Restore the bundled lists with one click

Diagnostics

  • Live resolver health and speed, DNS cache state
  • Whether outbound port 25 is open from this PC
  • Which of the 6 blocklists answer from your network
  • A lookup for one domain on its own

Snapshots

  • Save a whole run and reload it later without re‑checking
  • Saving comes with Pro and Enterprise; snapshots stay on your computer

Command line

  • --check addresses and print JSON
  • --file list.csv for headless batch runs
  • --no-window, --port, --verbose
  • Included with Enterprise

Offline licensing

  • Keys are verified offline and bound to your Machine ID
  • Expiry with a 3-day grace period
  • Only starting a run needs a license: results, snapshots and exports stay available

Pricing

One flat subscription price

All nine verification stages in every plan. Pro adds SMTP probing and million-row runs; Enterprise adds automation and more speed. No per-address fees.

Essential

For one person cleaning their own lists on one PC.

$19/month

billed monthly

Get Essential monthly

$16.33/month

$49 billed every 3 months save 14%

Get Essential quarterly

$14.08/month

$169 billed yearly save 25%

Get Essential yearly
  • Up to 100,000 rows per run
  • CSV and TXT exports
  • Up to 24 parallel checks
  • 1 PC (Machine IDs)
  • Email support
  • All 9 verification stages
  • 24-signal spamtrap engine and 989 known traps
  • 6 mail-server blocklists

Enterprise

For teams and agencies automating verification on up to ten PCs.

$89/month

billed monthly

Get Enterprise monthly

$76.33/month

$229 billed every 3 months save 14%

Get Enterprise quarterly

$66.58/month

$799 billed yearly save 25%

Get Enterprise yearly
  • 500,000 mailbox checks a month on the Dpunk probe server
  • Command line automation (--check, --file)
  • This computer's mail server (localhost mode)
  • Up to 128 parallel checks
  • 5 PCs (Machine IDs)
  • Priority support + onboarding call
  • Everything in Pro

Pay with crypto via Cryptomus: USDT, BTC, ETH, LTC, TRX and more. Your license key is issued automatically the moment the payment confirms.

Every plan runs all nine verification stages, the spamtrap engine and the six blocklists. Higher plans add SMTP probing, bigger runs, more export formats and automation. Prices in USD.

Not sure yet? Try Pro free for 3 days on one PC. No payment needed.

Compare plans in detail

Email verification software

A bulk email verifier that runs on your own PC

Load a CSV, TXT or TSV list, verify it on Windows and export a clean email list that is ready for your email marketing tool.

Bulk email verification

Verify email addresses in bulk: up to 1,000,000 rows per run on Pro and Enterprise and 100,000 on Essential, from pasted text or a file.

Email list cleaning

Remove invalid, duplicate and disposable addresses, flag no-reply, billing and other risky role accounts, catch typos such as gnail.com with a suggested fix, and export only the addresses worth mailing. Team inboxes such as info@ and sales@ stay in.

Spam trap detection

A 24-signal spam trap checker quarantines likely honeypots and known trap addresses before they can get your sending domain blocklisted.

Deliverability checks

MX and DNS lookups, SPF, DMARC and MTA-STS, plus six mail server blocklists including Spamhaus and SpamCop, help you lower bounces and protect your sender reputation.

SMTP email checker

On Pro and Enterprise, check whether a mailbox exists without sending an email, with catch-all detection for servers that accept every address.

Private, flat priced

Your email lists stay on your computer. One flat subscription with no per-address credits, and a free trial to start.

Questions

Common questions

Still unsure? Ask us or read the full FAQ.

What exactly does Dpunk Email Verifier check?

Every address runs through nine stages on your own PC: syntax & parsing, duplicates, your own rules, heuristics (disposable, risky-role, free-provider, typo, lookalike and placeholder detection), DNS mail routing, domain authentication (SPF, DMARC, MTA-STS, BIMI), six mail-server blocklists, a 24-signal spamtrap engine and, if you switch it on, SMTP mailbox probing.

Each address ends in exactly one of seven verdicts (passed, risky, invalid, unknown, filtered, duplicate or honeypot) with a score from 0 to 100, a reason code and a plain-English explanation. See every method.

Is my list uploaded anywhere?

No. The app verifies everything on your own computer. The only traffic it creates is the DNS lookups the checks need (and, if you enable probing, the SMTP conversations with mail servers). Your list, your results and your exports stay on your PC.

The one exception is a mailbox check you choose to run on the Dpunk probe server: only the addresses being checked are sent there, over an encrypted connection, and they are deleted within an hour.

Does it send any email?

Never. The SMTP prober asks the mail server about a recipient and hangs up before a message could start; it has no code path for sending mail at all.

Why do some addresses come back “Unknown”?

Because a check could not finish: a DNS timeout, greylisting, a blocked port 25 or a temporary failure. The rule is simple: an inconclusive check never becomes a verdict. A false “invalid” would make you delete a real customer, so these addresses are marked unknown. Re-check them later; do not delete them.

What’s the difference between the plans?

Verification is the same in every plan: all nine stages, the 24-signal spamtrap engine, the 989 known trap addresses and the six blocklists. The plans differ in what you can do around it:

  • Essential: up to 100,000 rows per run; CSV and TXT exports; up to 24 parallel checks; 1 PC (Machine IDs); email support.
  • Pro: everything in Essential, plus up to 1,000,000 rows per run; SMTP mailbox probing (direct + your own relay); 200,000 mailbox checks a month on the Dpunk probe server; JSON and ZIP exports; save snapshots; editable intel lists; 3 PCs (Machine IDs); priority email support.
  • Enterprise: everything in Pro, plus 500,000 mailbox checks a month on the Dpunk probe server; command line automation (--check, --file); this computer's mail server (localhost mode); up to 128 parallel checks; 5 PCs (Machine IDs); priority support + onboarding call.

The plan is written into your license key, so the app turns on the right features offline. Compare the plans side by side.

How do I pay?

Pay with crypto via Cryptomus: USDT, BTC, ETH, LTC, TRX and more. Your license key is issued automatically the moment the payment confirms. No waiting for a person to read an email.

How does the free trial work?

3 days with the Pro features on one PC, no payment needed: SMTP probing, up to 1,000,000 rows per run, JSON and ZIP exports, snapshots and editable lists. Create an account, verify your email, then open the app and choose Start 3-day free trial on its License screen. It signs in and activates by itself. One trial per email address and one per PC.

Clean your next list before you send it.

Download the app, paste your Machine ID and start verifying in minutes. Nothing to install, nothing uploaded.

Verify. Protect. Grow.