What does "check if an email address exists" actually mean?
Before sending an email, you may want to confirm whether an address is real — without actually sending anything. This is useful when building a prospect list, validating signups at the point of entry, or auditing a CRM before a campaign.
There are three levels of verification, each providing a different confidence level:
- Syntax check — does the address look correctly formatted?
- Domain/MX check — does the domain have a functioning mail server?
- SMTP handshake — does the specific mailbox exist on that server?
Two related edge cases are worth understanding up front: catch-all domains can accept every address without proving a mailbox exists, and disposable email addresses may technically work while still being poor-quality signups.
Only the SMTP handshake tells you whether the individual mailbox exists — and it does this without sending an actual email.
How the SMTP handshake works (without sending)
During an SMTP handshake, a verification tool connects to the recipient's mail server and initiates a fake delivery conversation:
→ EHLO verifier.example.com
← 250 Hello
→ MAIL FROM: <check@verifier.example.com>
← 250 OK
→ RCPT TO: <target@theirdomain.com>
← 250 OK (address exists)
OR
← 550 User unknown (address does not exist)
→ QUIT
The tool quits before the DATA command, so no email is actually delivered.
The server's response to RCPT TO reveals whether the mailbox exists.
This technique is called a "dry run" or "RCPT TO verification." It's the method used by all professional email verification services, including ListEmailCheck.
Limitations you need to know
Catch-all domains
Some mail servers are configured to return 250 OK for every address regardless
of whether the mailbox actually exists (see: catch-all domains). SMTP verification cannot
confirm mailbox existence on these domains — the server always says "yes."
Greylisting
Some servers implement greylisting, which temporarily rejects unknown senders with a "try again later" response. Professional verifiers handle this with retry logic, but it can slow down verification of affected domains.
Privacy-blocking servers
A small number of servers block RCPT TO probing intentionally, returning 250 OK
for all addresses to prevent enumeration. These behave identically to catch-all domains
from a verification standpoint.
How to check a single email address
For a quick one-off check, use the free single-address verifier at ListEmailCheck's free email validator. Enter the address and get an instant result showing syntax, MX, and SMTP status — no account required, up to 5 free checks per day without signing in.
How to check email addresses in bulk
For lists of more than a handful of addresses, use the bulk email verifier. Upload a CSV with your addresses, and the results come back with a status for each one: valid, invalid, risky (catch-all), or disposable.
The free plan includes 100 verifications per day. Larger lists are available on paid plans.
Can you do this manually via the command line?
Yes — technically. You can run a manual SMTP test using telnet or nc:
# 1. Find the MX record for the domain
dig MX gmail.com
# 2. Connect to the mail server on port 25
telnet gmail-smtp-in.l.google.com 25
# 3. Run the handshake manually
EHLO yourdomain.com
MAIL FROM: <test@yourdomain.com>
RCPT TO: <address@gmail.com>
QUIT
In practice, this is only useful for debugging individual addresses — for anything more than a few checks, a bulk verifier is far more practical.
Key takeaways
- You can verify whether a mailbox exists using an SMTP handshake without sending an email
- Three levels: syntax check → MX/domain check → SMTP mailbox check (most accurate)
- Catch-all domains limit SMTP verification accuracy — no tool can fully confirm catch-all mailboxes
- For single addresses: use ListEmailCheck's free validator
- For lists: use the bulk verifier — 100 free checks/day