Local-first email verification for Windows

Catch bad addresses and spamtraps before you hit send.

Nine verification stages, a 20-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. sales@northwind-sample.com Risky role_address
  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
  • 20spamtrap 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

    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

    Reason codes

    blocked_domain_or_address domain_zone_blocked free_provider_excluded

    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), role mailboxes (279 names), free providers (373)
    • 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 domain_typo_possible placeholder_address suspicious_keyword

    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
    • 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 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 20 signals, one score

    Spamtrap engine

    Would mailing this get your sending domain blocklisted?

    • Twenty 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

    Reason codes

    known_honeypot_address honeypot_local_pattern user_honeypot_domain honeypot_quarantined

    Example

    spamtrap@lists.example-isp.net honeypot_local_pattern Honeypot
    All 20 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

Twenty 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 and operators

  • 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: 327 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.

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.

  • 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.

  • 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.

  • 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 never leaves your computer
  • Mailbox checks (SMTP, Pro and Enterprise) need a network that allows outbound port 25, or a mail server on your PC (Enterprise). Many home and office connections block that port. Then 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

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 trap domains, trap addresses, disposable, free and role lists on Pro and Enterprise
  • 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

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
  • 20-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
  • Command line automation (--check, --file)
  • This computer's mail server (localhost mode)
  • Up to 128 parallel checks
  • 10 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

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, role, free-provider, typo and placeholder detection), DNS mail routing, domain authentication (SPF, DMARC, MTA-STS, BIMI), six mail-server blocklists, a 20-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.

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 20-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); JSON and ZIP exports; save snapshots; editable intel lists; 3 PCs (Machine IDs); priority email support.
  • Enterprise: everything in Pro, plus command line automation (--check, --file); this computer's mail server (localhost mode); up to 128 parallel checks; 10 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.