BounceTest
  1. BounceTest
  2. Guides

How email verification works, without sending an email

Checking an address does not mean writing to it. It means starting the conversation every mail server has before a message is handed over, and stopping one step short.

Guide ยท updated

In shortA verifier checks that the address is written properly, finds the mail server for its domain, and asks that server whether it would take mail for this address. Then it hangs up. No message is written, so nothing arrives in anyone's inbox.

Step 1: is it written like an address?

A name, an @, a domain with a dot in it, and no characters that cannot be there. This catches anna@example and anna example.com at once. It also catches slips in well-known domains, such as gmail.con, where the domain the person meant can be suggested.

Step 2: can the domain receive mail?

Every domain that takes mail says so in DNS, the internet's address book, with a record naming its mail servers. The verifier looks that up. Three things can happen:

The third case is easy to get wrong. One DNS service can report a domain as broken while another answers perfectly well; we have seen it happen with a large internet provider. BounceTest asks a second, unrelated DNS service before it calls a domain dead.

Step 3: ask the mail server

This is the heart of it. Mail servers talk to each other in short lines of text, and the conversation always starts the same way. Ours are the lines in color:

220 mx.example.com ready
EHLO mail.verifier.example
250 mx.example.com
MAIL FROM:<check@verifier.example>
250 sender ok
RCPT TO:<anna@example.com>
250 recipient ok
QUIT

The line that matters is the answer to RCPT TO: "would you take mail for this address?" A 250 means yes. A 550 with words like "user unknown" means there is no such mailbox.

A real email would continue with the command DATA and then the message itself. A verifier never sends it. It says QUIT and leaves, and the person at that address never knows anyone asked.

Step 4: does the server say yes to everything?

Some servers answer 250 for any name at all. So after a yes, the verifier asks about an address that cannot exist. If that is accepted too, the first yes proved nothing, and the address is reported as risky rather than valid. More in what a catch-all email address is.

Why some answers come back "unknown"

None of these says anything about the mailbox, which is why "unknown" is its own result and not a guess in either direction.

Three things we got wrong at first

Reading a mail server's answer correctly is most of the work. These are mistakes BounceTest made until we measured it against 143 mail providers and company domains.

What verification cannot tell you

What the results mean

ResultWhat was foundWhat to do
ValidThe mailbox existsSend
InvalidNo such mailbox, or the domain cannot receive mailRemove
RiskyThe server accepts every address, or the mailbox is fullYour call
DisposableA temporary address from a throwaway-mail serviceRemove
UnknownThe server did not answerCheck again later

What each bounce would have cost you is in why emails bounce, and the whole routine for a list is in how to clean an email list.