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:
- There is a mail server. On to the next step.
- There is none, or the server named does not exist. No mail can ever be delivered there, so every address at the domain is invalid.
- The lookup itself failed. That says nothing about the domain yet.
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"
- "Come back in a few minutes." Some servers say this to any caller they have not met before. Asked again a little later, they answer properly.
- "You are asking too fast." Large providers limit how many questions one sender may ask. A careful verifier keeps to a pace each provider accepts.
- The server refuses the caller. A few providers only talk to senders they already know.
- No answer at all. The connection times out.
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.
- Asking with no sender address. Checks are often sent from an empty sender, the way a bounce notice is. Some company servers refuse everything that arrives like that, in words that read exactly like "no such mailbox." Read the wrong way, every person at that company comes back invalid. We now ask from a real address.
- Asking about two addresses in one go. One provider answered the second question with "only one recipient is accepted," using the code for an unknown mailbox. Servers we do not know now get one question at a time.
- Believing one DNS service. Described above: a domain is only called dead when two unrelated services agree.
What verification cannot tell you
- Whether anyone reads the mailbox. It exists; that is all the server says.
- Which addresses are real at a server that accepts everything. Yahoo and AOL answered yes to an address that cannot exist when we asked, as did many companies. Those addresses are risky, and anyone who calls them all valid is guessing.
- Whether the address will still exist next month. People change jobs. A list has to be checked again from time to time.
What the results mean
| Result | What was found | What to do |
|---|---|---|
| Valid | The mailbox exists | Send |
| Invalid | No such mailbox, or the domain cannot receive mail | Remove |
| Risky | The server accepts every address, or the mailbox is full | Your call |
| Disposable | A temporary address from a throwaway-mail service | Remove |
| Unknown | The server did not answer | Check 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.