How to check if an email address is valid — without sending
Every invalid address on your list is a small tax. It burns sending quota, drags down your open rate, and — worse — chips away at the sender reputation that decides whether your future emails land in the inbox or the spam folder. Checking addresses before you send is the single cheapest thing you can do to protect deliverability. Here is how to do it, from the manual checks anyone can run to the automated ones that scale.
Manual checks: syntax, MX record, Google search
You can eyeball a single address without any tool. Three quick checks catch most obvious problems.
1. Syntax
Does the address follow the basic shape [email protected]? Watch for missing
@, double dots, spaces, or a trailing comma from a bad CSV export. Syntax alone
won't tell you if a mailbox exists, but a malformed address can be discarded immediately —
no point checking further.
2. MX record
An MX (Mail Exchange) record tells the world which server accepts mail for a domain. If a domain has no MX record, it cannot receive email, full stop. You can check from a terminal:
dig MX gmail.com +short # 5 gmail-smtp-in.l.google.com. # 10 alt1.gmail-smtp-in.l.google.com. # ...
An empty result means the domain accepts no mail — every address on it is invalid. This is a
fast, free filter that removes a surprising share of junk, especially typo domains like
gmial.com.
3. Google search
For a single high-value address, a quick search of the exact string in quotes
("[email protected]") sometimes surfaces the person's public profile, confirming
the address is real and in use. This does not scale, but for one-off outreach it is a useful
sanity check.
Why sending a test email is risky
The instinct is to just send a message and see if it bounces. Don't. Sending to an address you haven't verified is exactly how deliverability gets wrecked:
- Spam traps. Some addresses exist only to catch senders who mail unverified lists. One hit can get your domain blocklisted.
- Hard bounces. Mailbox providers track your bounce rate. A test send to a dead address is still a bounce on your record.
- Reputation, not just this send. The damage isn't limited to one email — it lowers the trust score that decides where all your future mail lands.
Verification exists precisely so you can answer "does this mailbox work?" without delivering anything.
SMTP verification — how it really works
SMTP verification is the closest you can get to certainty without sending. The verifier opens a connection to the recipient's mail server and begins the delivery handshake — but stops before actually handing over a message:
- Connect to the domain's MX server.
- Say hello (
HELO) and declare a sender (MAIL FROM). - Ask the server to accept the recipient (
RCPT TO: <address>). - Read the server's answer, then disconnect without sending
DATA.
A 250 OK means the mailbox is accepted; a 550 means it does not exist.
No email is ever delivered. Two caveats keep this honest:
| Server behaviour | What it means |
|---|---|
| Catch-all | The domain accepts every address, so 250 OK does not prove a specific mailbox exists. Treat as risky, not valid. |
| Greylisting | The server returns a temporary 4xx to deter bots. No definitive answer until a retry — often reported as "unknown". |
A good verifier labels catch-all and unknown results separately instead of guessing, because counting them as deliverable is how bounce rates creep back up. See the FAQ for how these edge cases are handled.
Bulk vs single check
For one address, the manual checks above are fine. For a list, they are not — you need automation, and you need it to be cheap enough that verifying is a habit rather than a budget decision.
- Single check — one address, one answer, in real time. Good for form validation, CRM hooks, or checking a lead before you reach out.
- Bulk check — a whole CSV or TXT file processed in the background, returning valid / risky / invalid counts. The right approach before any campaign.
The cost trick that matters at scale: run cheap syntax and MX validation across the entire list first, then apply the expensive SMTP check only to the addresses that survive. On a typical cold list this cuts the deep-check volume roughly in half, and the total cost with it. That's the core idea behind two-phase verification.
Do it in seconds with CharlyMail
CharlyMail runs every check described here — syntax, MX lookup, disposable-domain and
role-address detection, and optional deep SMTP — and returns a verdict per address, enriched
with name, gender, country and a 0–100 quality score. A single address costs
$0.00049; a 10,000-address list is $4.90 for validation. New accounts
get 200 free tokens, so you can test data quality before paying anything.
Verify an address in one call
Paste an address or upload a list. Syntax, MX, disposable and SMTP checks run automatically — no test email, no bounce risk. 200 free tokens on signup, pay with crypto, no subscription.
Start with 200 free tokensFrequently asked questions
How can I check if an email address is valid without sending an email?
Check the syntax, confirm the domain has an MX record, and run an SMTP verification that opens a connection to the mail server without delivering a message. A verifier does all three at once and returns a verdict per address.
Is it safe to send a test email to check if an address works?
No. Sending to unknown addresses risks hitting spam traps and generating hard bounces, both of which damage sender reputation. SMTP verification checks the mailbox without delivering anything.
What does it mean when an email is a catch-all?
A catch-all domain accepts mail for every address, so an SMTP check cannot confirm a specific mailbox exists. Good verifiers label these as risky rather than valid, because treating them as deliverable inflates bounce rates.
Can I check a whole list at once?
Yes. Upload a CSV or TXT file and the verifier processes every address in the background, returning valid, risky and invalid counts. Cheap validation runs first, and deep SMTP is applied only to the survivors to keep the cost down.