2026-09-22 · 6 min read
You can verify an email address without sending an email by running four checks in order: confirm the syntax is valid, look up the domain's MX records to see if it accepts mail, open an SMTP conversation with the mail server and ask whether it will accept that recipient, then stop before any message is sent. The answer you get back is a strong signal, but it is never a guarantee, because many servers accept every address or deliberately hide which mailboxes exist.
This guide walks through each step, what each one can and cannot tell you, and how to turn the results into a sensible decision about whether to email someone.
Why verify an email address before sending?
Every bounced message tells mailbox providers something about you. A list with a high bounce rate gets your sending domain treated with suspicion, and once that happens even your good emails start landing in spam. Verifying first protects your domain's reputation, saves money on sending tools that charge per contact, and stops your CRM filling up with records that look real but lead nowhere.
It also catches mistakes that are easy to make at scale: a typo in a domain, a company that changed its domain years ago, or a contact who left and whose mailbox was removed.
Step 1: How do you check email syntax?
The cheapest check runs locally with no network call. A valid address has one local part, an @, and a domain with at least one dot. In practice you also want to reject:
- Spaces, commas and unbalanced quotes
- Consecutive dots, or a dot at the start or end of the local part
- Domains with invalid characters or a missing top-level domain
- Obvious placeholders such as
test@test.comornoreply@example.com
Avoid writing an overly strict regular expression. The formal standard allows characters such as + and ' in the local part, and real people use them. A + tag (name+news@domain.com) is valid and usually delivers to the same mailbox.
Syntax checks only remove the clearly broken. They say nothing about whether the mailbox exists.
Step 2: What does an MX lookup tell you?
An MX (mail exchanger) record is the DNS entry that says which servers accept mail for a domain. You can look one up from any terminal:
dig +short MX example.com
If the domain has MX records, it is set up to receive mail. If it has none, the standard says a sender may fall back to the domain's A record, but in practice a domain with no MX record rarely receives mail reliably. If the domain does not resolve at all, the address is dead.
The MX lookup also tells you who hosts the mail. Large hosted providers behave in predictable ways during the next step, and some of them are known to accept every recipient at the SMTP stage, which affects how much you can trust the result.
Step 3: How does the SMTP mailbox check work?
This is the step people mean when they talk about verifying without sending. You connect to the mail server on port 25 and begin a normal mail conversation, then quit before delivering anything. A simplified exchange looks like this:
EHLO verifier.yourdomain.com
MAIL FROM:<check@yourdomain.com>
RCPT TO:<person@example.com>
QUIT
The important line is the server's reply to RCPT TO. A 250 reply means the server is willing to accept mail for that recipient. A 550 or similar permanent error usually means the mailbox does not exist. A 4xx reply is a temporary refusal, often greylisting, and means you should try again later before drawing a conclusion.
Because you send QUIT before the DATA command, no message is ever delivered and the recipient sees nothing.
A few practical points matter here:
- Use a proper sending identity. Connect from a server with valid reverse DNS and a
HELOname that matches it. Many mail servers refuse or tarpit connections from addresses that look like home connections or have no reverse DNS. - Go slowly. Rapid-fire checks against one domain look like a directory harvesting attack. Space them out and keep the volume per domain low.
- Expect port 25 to be blocked on most cloud and home connections. You need a host that is allowed to make outbound SMTP connections.
What is a catch-all domain?
A catch-all (or accept-all) domain is configured to accept mail for any address, whether or not a mailbox exists. Ask it about person@domain.com and it says 250. Ask it about zq8x7vv@domain.com and it also says 250.
The standard way to detect this is to test a random address that cannot exist alongside the real one. If both are accepted, the domain is catch-all and the SMTP check tells you nothing about that particular address. The message might be delivered to a shared inbox, quietly discarded, or bounced later after the server processes it.
Catch-all domains are common among companies, so a good verification process needs a separate category for them. Treating "accepted by a catch-all" the same as "verified" is one of the most frequent mistakes in list cleaning.
What are role addresses and should you email them?
Role addresses belong to a function rather than a person: info@, sales@, support@, admin@, hr@. They are often valid and deliverable, but they behave differently:
- Several people may read them, or nobody does
- They are more likely to report unsolicited mail as spam
- Some sending platforms restrict or refuse them
A general inbox published on a company's own website is often the most appropriate way to contact a business. That is a different use from adding info@ addresses to a cold sequence at scale. Label role addresses separately so you can decide per campaign.
Why are email verification results probabilistic?
Every result from this process is a likelihood, for several reasons:
- Catch-all domains accept everything, so the check cannot separate real from fake addresses.
- Some large providers accept all recipients at the SMTP stage and only bounce later, or deliberately return the same answer for every address to stop harvesting.
- Greylisting and rate limits produce temporary failures that look like errors but are not.
- Mailboxes change. A mailbox that exists today can be removed next week when someone leaves.
- Full mailboxes and disabled accounts can return codes that are ambiguous.
So the honest output of verification is a set of categories: valid, invalid, catch-all, unknown, plus flags for role addresses and disposable domains. Record the date you checked as well, because a result from six months ago is much weaker than one from yesterday. We make the same argument about company data in our post on B2B data provenance.
How should you act on the results?
A simple policy works for most teams:
- Send to valid addresses checked recently.
- Send to catch-all addresses in small batches and watch the bounce rate closely.
- Re-check unknown results later instead of discarding them.
- Drop invalid and disposable addresses.
- Decide case by case on role addresses.
Verification answers whether you can reach an address. It does not answer whether you should. If you prospect into the EU or UK, the legal side matters as much as the technical side, and our GDPR-aware B2B prospecting checklist covers that part.
Working with Syntora Ai
Email marketing and list hygiene were the first things Syntora Ai did in 2019, and checked contact data is still part of our growth and data practice. If you want a verification step built into your CRM or outreach pipeline, with results and check dates stored against every record, write to hello@syntorahq.ai or use the contact page.