Table of Contents expand_more
Key takeaways
-
check_circle
There are five practical ways to verify if an email is valid in 2026: regex syntax check, MX record lookup, SMTP handshake, a free real-time verifier, and a bulk verification API. The first three are free but partial. The last two are fast, complete, and reliable at scale.
-
check_circle
An email is "valid" only when four checks pass: format, domain MX record, mailbox existence, and risk (catch-all, disposable, role-based, spam trap). Passing any single check is not enough to send safely.
-
check_circle
Gmail and Yahoo started enforcing sender thresholds in February 2024. Any sender above 5,000 messages a day to Gmail with a bounce rate above 0.3 percent gets throttled. Above 2 percent across providers, your domain gets blocked.
-
check_circle
Regex alone produces 10 to 20 percent bounce rates because format validity does not equal deliverability. MX lookup adds domain confidence but does not check the mailbox.
-
check_circle
Real-time verifiers run all four checks in under three seconds. Mailsfinder, ZeroBounce, NeverBounce, and Reoon all offer free tiers between 100 and 600 verifications per month for occasional use.
-
check_circle
Verify any cold list older than 90 days before sending. B2B contact data decays at about 2.5 percent per month. A six-month-old list can already breach the Gmail throttling threshold on day one.
-
check_circle
Bulk verification via API costs as little as $0.001 per email on Mailsfinder's Growth plan, scales to 50,000 emails per job, and returns a per-email status that plugs straight into Instantly, Plusvibe, HubSpot, or Salesforce.
TL;DR
To verify if an email is valid, run four checks in order: syntax (regex), domain MX record, SMTP mailbox handshake, and risk screening for catch-all, disposable, role-based, and spam-trap addresses. The fastest way is to paste the address into a free real-time verifier like Mailsfinder, which runs all four checks in under three seconds.
5 ways to verify if an email is valid
Each method below answers part of the question "is this email valid?" The first three are free and can be done from a terminal in a few seconds. The last two wrap all four validation checks into a single result and are what most B2B teams use in production. Pick by volume, accuracy needed, and how comfortable you are running scripts.
Method 1: Syntax check (regex, RFC 5321 rules)
The first check is always format. RFC 5321 (the SMTP standard) and RFC 5322 (the message format standard) define what an email address is allowed to look like. A local part of up to 64 characters, an at sign, a domain of up to 255 characters, and a TLD. Anything that breaks these rules is invalid before you even hit DNS.
A simple regex catches roughly 60 to 70 percent of obviously bad addresses: typos, missing TLDs, extra at signs, and disallowed characters. It runs in microseconds and needs no network access, which is why it is the standard front-end check on signup forms.
# Python: RFC 5322 simplified regex check import re EMAIL_RE = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$" def is_syntactically_valid(email): return re.match(EMAIL_RE, email) is not None is_syntactically_valid("sarah.chen@stripe.com") # True is_syntactically_valid("sarah@@stripe.com") # False is_syntactically_valid("sarah.chen@stripe") # False (no TLD) is_syntactically_valid("not-an-email") # False
The limit: Regex says the format is plausible. It cannot tell you whether the domain exists, whether the mailbox is real, or whether the address is a spam trap. Sending to regex-only data still produces 10 to 20 percent bounce rates. Treat this as gate one, not the whole gate.
Method 2: Domain + MX record lookup
The next check is whether the domain in the email address can receive mail at all. You query DNS for an MX (Mail eXchange) record. If a domain has no MX record (and no A record fallback), it is not configured to accept email and the address is invalid no matter what the syntax looks like.
This filter alone removes parked domains, expired domains, typo domains (gmial.com), and disposable services that have been shut down. It is the second cheapest check after regex and a clean way to get accuracy from 70 percent up to roughly 85 percent.
# Bash: quick MX lookup with dig $ dig +short MX stripe.com 10 mxa-00185c01.gslb.pphosted.com. 10 mxb-00185c01.gslb.pphosted.com. $ dig +short MX asdfqwer1234.com # (no output = no MX record = domain cannot receive mail) # Python: programmatic MX lookup with dnspython import dns.resolver def has_mx_record(domain): try: records = dns.resolver.resolve(domain, "MX") return len(records) > 0 except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer): return False has_mx_record("stripe.com") # True has_mx_record("asdfqwer1234.com") # False
The limit: An MX record means the domain accepts mail in general, not that the specific mailbox exists. Most B2B domains have MX records configured even for retired departments, ex-employees, and old aliases. You still need a mailbox-level check.
Method 3: SMTP handshake (the gold standard)
The deepest free check is the SMTP handshake. You connect to the receiving mail server, identify yourself with HELO, set a sender with MAIL FROM, and ask if the recipient mailbox exists with RCPT TO. The server replies with a status code. 250 means the mailbox accepts mail. 550 means it does not. You then disconnect with QUIT before any actual message is sent.
This is what every paid verification tool runs under the hood. Done correctly, it pushes accuracy from 85 percent up to roughly 95 percent on B2B addresses. Done badly, it lands your sending IP on a blacklist.
# Python: SMTP handshake (simplified, single email) import smtplib, dns.resolver def smtp_verify(email): domain = email.split("@")[1] mx = str(dns.resolver.resolve(domain, "MX")[0].exchange) server = smtplib.SMTP(timeout=10) server.connect(mx) server.helo("verify.example.com") server.mail("check@example.com") code, _ = server.rcpt(email) server.quit() return code == 250 # 250 = mailbox accepted smtp_verify("sarah.chen@stripe.com") # True (likely) smtp_verify("ghost.user@stripe.com") # False (550 reply)
The limit: Gmail, Yahoo, and Outlook 365 deliberately refuse to confirm mailbox existence to prevent harvesting. They reply with a generic 250 OK for every address. Catch-all domains do the same. And after a few hundred handshakes from a single IP, the major providers will rate-limit or blacklist you. This is why production teams pay a vendor with rotating IP pools instead of running their own SMTP loop.
Method 4: Use a free real-time verifier
If you do not want to write code, the simplest way to verify if an email is valid is to paste it into a free real-time verifier. A good one runs all four checks (syntax, MX, SMTP, risk) and returns a verdict in under three seconds.
The free Mailsfinder email verifier gives you 100 verifications per day with no card on file. It uses the same dual-layer SMTP engine as the paid plans, so per-email accuracy is identical at 99 percent. For a fuller comparison of free options, see our roundup of the best free email verifier tools. Other free tiers worth knowing about: Reoon (600 per month), ZeroBounce (100 per month), Kickbox (100 on signup), and Emailable (250 on signup).
Open the free verifier
Go to the Mailsfinder email verifier. No signup needed for the first 100 daily verifications.
Paste the email address
Type or paste the address. The tool starts running syntax, MX, SMTP, and risk checks in parallel as soon as you blur the field.
Read the per-check verdict
Each address is labeled Valid, Invalid, Catch-all, Risky, or Unknown. The tool also flags disposable domains, role-based mailboxes (info@, support@), and known spam traps so you can decide before sending.
Send confidently or skip the address
Send to Valid and Risky-but-accepted. Skip Invalid, disposable, and spam-trap addresses. Decide on a per-campaign basis whether to send to catch-alls.
Verify any single email in under 3 seconds
Mailsfinder runs all four checks plus catch-all and spam-trap detection. 100 free daily verifications, no card required.
Method 5: Bulk verification via API
For anything above a few hundred addresses, a real-time verifier is too slow to use one-by-one. You want bulk. The Mailsfinder bulk email verifier accepts up to 50,000 emails per job, runs every check in parallel, and returns a clean CSV plus a per-email status flag ready for import into Instantly, Plusvibe, Smartlead, HubSpot, or Salesforce.
For production pipelines (signup forms, CRM updates, lead enrichment workflows), the same engine is available as a REST API. Pricing on the Growth plan is $0.001 per email, which is roughly six times cheaper than the average of ZeroBounce, NeverBounce, Kickbox, Emailable, and EmailListVerify.
# Verify a single email via the Mailsfinder REST API curl -X POST https://api.mailsfinder.com/v1/verify \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email": "sarah.chen@stripe.com"}' # Sample response { "email": "sarah.chen@stripe.com", "status": "valid", "score": 98, "checks": { "syntax": "pass", "mx_record": "pass", "smtp": "pass", "catch_all": "false", "disposable": "false", "role_based": "false", "spam_trap": "false" } }
For full deliverability scoring (not just per-email verification), pair the bulk verifier with the Mailsfinder deliverability checker. It tests SPF, DKIM, DMARC, blacklist status, and inbox placement across Gmail, Outlook, and Yahoo seed addresses so you know your sending infra is healthy before the first send.
What "valid" actually means
The word "valid" gets thrown around to mean four different things. Mixing them up is why teams think they have a clean list when they actually have a list that bounces. Here are the four definitions you should keep separate.
Syntactically valid
The string matches the RFC 5322 format. There is exactly one at sign, a local part, a domain, and a TLD. This passes regex. It says nothing about whether the address works.
Deliverable
The mail server accepts a message for that address. Syntax passes, MX exists, SMTP responds with 250 OK. The message will reach a mailbox of some kind. Whether the right person reads it is a separate question.
Safe-to-send
The address is deliverable and the risk checks are clean. Not a disposable mailbox, not a role-based shared inbox, not a known spam trap. This is what cold outreach needs.
Catch-all (unknown)
The server accepts every address on the domain regardless of whether the mailbox exists. The SMTP response is 250 OK either way. Treat catch-all results as an explicit "unknown" category, not as valid.
A useful rule of thumb. When somebody says "this email is valid," ask which of the four they mean. For cold outreach, only definition three counts. For a signup form, definitions one and two are usually enough.
Signals that an email is invalid
When you run any verifier, the result is almost never a clean yes or no. It is a status plus a list of flags. Knowing which flag means "do not send" saves you from learning the hard way at the cost of your sender reputation.
No MX record on the domain
The domain has no mail server configured. Nothing you send will ever arrive. Hard invalid. Drop the address.
SMTP returns 550 mailbox unavailable
The server told you directly that the mailbox does not exist. This is the cleanest hard bounce signal you can get short of actually sending. Drop the address.
Disposable email domain
Domains like mailinator.com, guerrillamail.com, tempmail.org, and several thousand others exist purely to bypass signup forms. Mail technically delivers but nobody reads it. Drop for cold outreach.
Role-based mailbox
info@, sales@, support@, contact@, hr@. These are shared inboxes. Mail delivers, but spam complaint rates are 10x higher than direct mailboxes. ESPs penalize role-based sends heavily. Skip for cold outreach.
Catch-all server
The server accepts everything. You cannot tell if the mailbox is real. Some teams send to catch-alls carefully and bake the risk into their bounce budget. Others skip them entirely. Both are defensible. Sending blindly is not.
Known spam trap
Addresses planted by ESPs, blocklist operators, and antispam services to identify lazy senders. Hitting a single pristine spam trap can blackhole your domain on Spamhaus within hours. Verifiers like Mailsfinder maintain known-trap lists. Treat any spam-trap flag as untouchable.
Greylist or temporary 4xx response
A 4xx response is "try again later." Real-time verifiers usually retry once before flagging the result Unknown. Re-verify these the day before sending instead of treating them as valid.
How email verification protects sender reputation
Verification is not just hygiene. It is the single biggest lever you have on whether your campaigns land in the inbox or in spam. Gmail and Yahoo introduced explicit sender thresholds in February 2024. Hit them and you get throttled. Cross them by much and you get blocked.
A clean verified list is the only reliable way to stay under those thresholds at scale. Every invalid address you remove before sending is one bounce that never hits your reputation, one complaint that never gets filed, and one spam-trap hit you avoid entirely.
Gmail spam complaint threshold above 5,000 daily messages. Above this, you get throttled.
Bounce rate at which most B2B ESPs (Instantly, Smartlead, Plusvibe) start auto-pausing campaigns.
Bounce rate at which Gmail and Yahoo block your domain outright. Recovery takes weeks.
Why verifying before sending is cheaper than not
Verification at $0.001 per email is roughly 30 times cheaper than the average cost of warming up a new sending domain after a block. A 10,000-address list costs $10 to verify. A blocked domain costs three weeks of campaign downtime plus several hundred dollars in new mailbox and warmup tool spend.
When to verify (and when to re-verify)
Verification is not a one-time event. B2B contact data decays. People change jobs, companies sunset domains, mailboxes get retired. The cleanest rule of thumb: verify any list older than 90 days before any new send.
Before any cold send
Always. Even a list you bought or scraped yesterday. Sources lie, formats break, and a 2 percent bounce rate on day one is enough to throttle the entire campaign.
Before importing a list into your ESP
Instantly, Plusvibe, Smartlead, and HubSpot all count bounces against your sending domain. Verify before import, not after the first send.
Before any re-engagement campaign
Your dormant list from six months ago has decayed by roughly 15 percent. Re-verify before you wake it up. Otherwise you will hit the throttling thresholds within the first batch.
On signup forms in real time
Calling the verification API on form submit blocks fake addresses, typos, and disposable signups before they pollute your CRM. The Mailsfinder API responds in under 800 ms on average, fast enough to run inline.
On a rolling 90-day cadence for active lists
For high-volume senders, re-verify every 30 days. For mid-volume, every 60 to 90. Treat verification as a recurring line item, not a one-off project.
Related reading
Verification is one piece of the cold outreach stack. Here is what to read next.
Mailsfinder vs Hunter.io
Side-by-side pricing, accuracy, and verification quality on the same test list.
Read Comparison arrow_forward balanceMailsfinder vs Snov.io
Find, verify, and sequence all-in-one. How the two stacks compare in 2026.
Read Comparison arrow_forward extensionBest email finder Chrome extensions
Twelve extensions tested for speed, accuracy, free credits, and CRM sync.
Read Listicle arrow_forward verifiedBest email verification tools in 2026
Full breakdown of ZeroBounce, NeverBounce, Kickbox, MillionVerifier, Reoon, and Mailsfinder on price, accuracy, and free tiers.
Read Listicle arrow_forward format_align_leftZoomInfo email format
Pattern, examples, and verified addresses for ZoomInfo employees.
View Format arrow_forward travel_exploreMailsfinder email discovery tool
Find verified B2B emails in seconds. 99 percent accuracy, 100 free daily credits.
Learn More arrow_forward