Email validation is not a single check. It is a pipeline of five distinct verification layers, each catching a different class of bad addresses. Skip any layer and you will let garbage into your list.
1. Syntax validation confirms the address follows RFC 5322 formatting rules. It checks for an @ symbol, valid local-part characters, a properly formed domain, and correct length limits (64 characters for local-part, 255 for the full address). This catches typos like "john@.com" or "john@@company.com" but nothing else. About 2% to 5% of form submissions fail syntax checks alone.
2. MX record lookup queries DNS to confirm the domain has mail exchange servers configured. A domain without MX records cannot receive email. This catches made-up domains ("john@notarealcompany.xyz") and domains that exist but do not handle mail. It adds roughly 50ms to the validation pipeline.
3. SMTP verification connects to the mail server and simulates sending a message without actually delivering it. This confirms the specific mailbox exists. More on this in the next section.
4. Catch-all detection identifies domains configured to accept email for any address, making individual mailbox verification impossible.
5. Disposable provider detection flags addresses from temporary email services like Guerrilla Mail, Mailinator, and 10MinuteMail. These addresses self-destruct, so sending to them is pointless. Enrich maintains a list of 30,000+ disposable domains that is updated weekly.