uCheckeruChecker
Blog/Verification
🔬 TechnicalFebruary 21, 20268 min read

How an email validator works technically

Six stages every address passes from input to a "good" verdict. No hand-waving: real DNS queries, SMTP commands, and actual server responses.

Most people picture email validation as checking whether there is an @ sign in the string. In practice, it is a chain of six independent stages, any one of which can reject the address. The first stage, syntax, catches only 2 to 3% of bad addresses. The other 97% are caught further down the pipeline.

Below I walk through each stage the way it works inside a real validator: concrete requests, concrete responses. If you are a developer, you should be able to build your own validator from this. If you are a marketer, you will understand why validation takes time and what you are actually paying for.

1

Syntax check

The first filter is RFC 5322. The address is split into a local-part and a domain. The validator checks total length (up to 254 characters), allowed characters, the absence of consecutive dots, and correct quoting.

A common mistake is thinking a regex can handle this. The formal grammar for an email address is 6,343 characters of regular expression. Real validators use a parser, not a regex.

Failure examples:

user@.domain.com → ❌ dot immediately after @
user@domain → ❌ no TLD (technically valid per RFC, but rejected in practice)
"user name"@domain.com → ✅ valid, but suspicious
2

DNS: MX record lookup

The domain passed syntax. Now we check whether it can receive mail at all. The validator sends an MX query for the domain.

dig MX gmail.com
;; ANSWER: gmail-smtp-in.l.google.com. (priority 5)
;; alt1.gmail-smtp-in.l.google.com. (priority 10)

No MX records? Fall back to an A record lookup (RFC 5321 fallback). If there is no A record either, the domain cannot receive mail, and checking further is pointless.

One subtlety: some domains return an MX record with priority 0 and a hostname of ".". That is a null MX (RFC 7505), an explicit declaration that the domain refuses all mail. Those addresses are rejected too.

3

SMTP handshake

This is the main event. The validator connects to the MX server and simulates the start of a delivery without actually sending anything. The technique is called SMTP callback verification.

EHLO validator.example.com
250 mx.google.com at your service

MAIL FROM:<check@validator.example.com>
250 OK

RCPT TO:<test@gmail.com>
550 5.1.1 The email account does not exist.

A 250 on RCPT TO means the mailbox exists. A 550 means it does not. Everything else is ambiguous: 450 (try again later), 421 (server overloaded), 552 (mailbox full).

One thing worth noting: we never send DATA. The connection drops after RCPT TO. No email is delivered, and the load on the receiving server is minimal.

This is also where things get hard. Google, Yahoo, and Microsoft can all detect bulk SMTP probes and respond 250 to any address, including nonexistent ones, to protect user privacy. A solid validator handles this with IP rotation, request throttling, and provider-specific logic built up over time.

4

Catch-all detection

Some domains accept mail at any address. Send to x7k9m2q@domain.com and the server returns 250 OK. When that happens, a positive SMTP response proves nothing about the specific mailbox.

Detection works by sending a RCPT TO with a deliberately invented address (a random string). If the server says 250, the domain is catch-all. The address gets flagged as "accept-all" with a warning that deliverability cannot be confirmed.

Around 18% of corporate domains run catch-all configurations. For marketers, these are a problem: if the real inbox does not exist behind the catch-all, every send to it is a hard bounce waiting to happen.

5

Disposable and temporary domains

The address exists, the domain accepts mail. But the domain is a throwaway service. Tempmail, Guerrilla Mail, Mailinator, and roughly 40,000 others create inboxes that expire in 10 minutes and then disappear.

This check runs against a database. Good validators update their disposable domain list daily, because new ones appear every day. It is a constant race: temporary mail services register fresh domains, validators add them to the blocklist.

Extra signal: if a domain was registered yesterday and its MX points to a known disposable host, it gets flagged as "risk" even before it appears in the database.

6

Final verdict

All stages are done. The validator assembles the results into a single response:

{
"email": "user@company.com",
"status": "valid",
"mx_found": true,
"smtp_check": true,
"catch_all": false,
"disposable": false,
"score": 0.95
}

The score is not binary. A catch-all address gets 0.6; a disposable one gets 0.1. A clean address with an SMTP confirmation scores 0.9 or above. The score is what lets you make decisions: the threshold for transactional mail differs from the threshold for a marketing campaign.

Why not just send the email and watch for bounces?

It is a reasonable question: skip the SMTP theater and send a real message, then check whether it bounces. Three reasons that does not work.

First: bounces are not instant. Some come back in minutes; others take days. For a list of 100,000 addresses, that timeline is not usable.

Second: every bounce damages your sending domain's reputation. ISPs track bounce rate, and once it crosses 2 to 3%, your mail starts going to spam. You are literally burning your domain by using live sends to test addresses.

Third: it is expensive. Every message you send costs ESP credits. Validation costs a fraction of a send, per address.

What separates a good validator from a mediocre one

Syntax and DNS checks are trivial; every tool does them. The gap shows up at SMTP. Cheap services send probes from a single IP without any throttling, collect false 250 responses from Google, and mark dead addresses as valid.

A good validator knows that Gmail returns 550 only under specific conditions. That Yahoo sometimes greylists the first probe. That Outlook rejects nonexistent mailboxes with 550 but occasionally delays the response by five seconds.

At uChecker we handle these edge cases per provider. It is not a ten-line script; it is months of engineering work.

See it for yourself

Upload your list and see how many addresses clear all six stages. First 100 checks are free.

Validate your email list →