Email Verification

How to Verify an Email Address: A Step-by-Step Guide

How to verify an email address step by step: syntax, domain and MX, the SMTP mailbox check, catch-all and role checks, and what each result means.

Skrap.ai Team8 min read
Share

Key takeaways

  • 1Verification runs in layers: syntax first, then the domain and its MX records, then a mailbox check over SMTP.
  • 2The SMTP check stops after the RCPT TO step, so the mail server answers for the mailbox and no email is ever sent.
  • 3Catch-all domains accept every address, so the specific mailbox can't be confirmed and the result is Risky.
  • 4Sending test emails to check addresses creates real bounces that count against your own sender reputation.
  • 5Act on the result: send to Valid, segment Risky, remove Invalid, and re-verify Unknown later.

Every address on your list is a small bet. A real mailbox delivers your message; a dead one bounces, and enough bounces tell mailbox providers you don't look after your list. Verifying an email address means finding out which kind you have before you send.

This guide walks through what happens during verification, one check at a time. Then it covers what each result means, the manual methods people try (and where they break), and when to verify a single address, a file, or a stream of sign-ups through an API.

What does it mean to verify an email address?

Verification answers one question: if you sent a message to this address right now, would a mailbox accept it? It doesn't tell you whether the person will read or reply, and it isn't the same as finding an address. You start with an address and check it. If you're starting from a name and a company instead, see how to find a business email.

A verifier works through its checks from cheapest to most expensive. Each one can rule an address out early, so the slower checks only run when they're needed.

Step 1: Check the syntax

The first check is whether the address is shaped like an email address at all: a local part, one @ sign, and a domain. The rules come from the internet message format standard, RFC 5322. In practice this step catches typos and copy-paste damage.

A failed syntax check is a clear Invalid. Passing it only means the address could exist.

Step 2: Look up the domain and its MX records

Next, the verifier asks DNS whether the domain exists and where it receives mail. A domain publishes its mail servers as MX records. If the domain doesn't exist, or exists but has nowhere to receive mail, every address at it is undeliverable.

RFC 5321 allows one fallback: when a domain has no MX record but does have an address record, mail can go to that host directly. A careful verifier accounts for that instead of marking every domain without MX records as dead.

Step 3: Check the mailbox over SMTP, without sending an email

This is the step that does the real work. The verifier connects to the domain's mail server and starts an ordinary mail conversation using SMTP, the protocol defined in RFC 5321. A normal send goes through these stages:

  1. 1Connect and greet. The client connects and introduces itself with EHLO.
  2. 2MAIL FROM. The client names the sender address for this transaction.
  3. 3RCPT TO. The client names the recipient, which is the address being checked. The server replies with a code: 250 means it will accept mail for that recipient, while a 550 usually means the mailbox doesn't exist.
  4. 4DATA. In a real send, the client would now transmit the headers and body of the message. A verifier never reaches this stage.
  5. 5QUIT. The verifier closes the session as soon as it has the RCPT TO reply.

Because the conversation ends before DATA, no message is transferred and nothing lands in anyone's inbox. The server has only answered the question "would you accept mail for this recipient?"

Server reply to RCPT TOWhat it meansTypical verdict
250Recipient acceptedValid, unless the domain is catch-all
550 (often with 5.1.1)Mailbox unavailable or doesn't existInvalid
450 or 451Temporary failure, try again laterUnknown, retry later
No reply or timeoutThe server didn't answer in timeUnknown, retry later

Replies in the 4xx range are temporary by definition, and some servers send them on purpose to senders they haven't seen before. That technique is called greylisting (RFC 6647 describes it), and it's one of the most common reasons a check comes back Unknown.

Step 4: Detect catch-all domains

Some domains accept mail for every address, real or not. On a catch-all domain, the server answers 250 for jane.doe@ and for a random string alike, so the "yes" from step 3 says nothing about the specific person.

A common way to spot this is to test whether the server also accepts an address that almost certainly doesn't exist at the domain. If it does, the domain is accept-all, and the address you care about comes back Risky: the domain receives mail, but the mailbox can't be confirmed. Our guide to catch-all emails covers how to send to these safely.

Step 5: Flag role-based and disposable addresses

Two kinds of address can pass every technical check and still be poor targets for one-to-one outreach.

  • Role-based addresses such as info@, sales@ or support@ reach a shared inbox or a team, not one person. RFC 2142 lists many of these mailbox names. See role-based email.
  • Disposable addresses come from services that hand out temporary inboxes. They often stop working soon after they're created, so an address that checks out today may be gone next week.

Skrap.ai flags both types alongside the result, so you can decide per campaign whether to keep them.

What Valid, Risky, Invalid and Unknown mean

Skrap.ai's Email Verifier gives every address one of four statuses. Here's what each one means and what to do next.

ResultWhat it meansWhat to doCredit cost
ValidThe mail server confirmed the mailboxSend1
RiskyThe domain accepts mail but the mailbox can't be confirmed, usually catch-allSend in a separate, smaller segment, or skip1
InvalidBad syntax, no working mail domain, or the server rejected the mailboxRemove and suppressFree
UnknownThe server didn't give a usable answer (timeout, greylisting, temporary error)Hold back and re-verify laterFree

Because Invalid and Unknown results cost nothing, checking a doubtful list doesn't punish you for how much of it turns out to be bad. For a team-wide routine, see email verification best practices.

Manual ways to verify an email, and their limits

You can check an address without a tool. Each manual method answers part of the question, and each has a catch.

Send a test email

The obvious approach is to send a message and see whether it bounces. It works, but every bad address you test produces a real hard bounce against your real sending domain. Mailbox providers read bounces as a sign of list quality, and Yahoo's sender best practices ask senders to monitor bounces and remove invalid recipients promptly. Testing a list this way damages the sender reputation you're trying to protect. And on a catch-all domain the test proves nothing, because the server accepts everything.

Look up MX records yourself

Command-line tools such as nslookup or dig show a domain's MX records (for example, nslookup -type=mx example.com). That confirms the domain can receive mail, but tells you nothing about the mailbox.

Talk SMTP by hand

Some technical users open a telnet session to port 25 and type the commands themselves. Many home and cloud networks block outbound port 25, many servers refuse or slow down connections from unfamiliar IP addresses, and repeated probing from one address can get it blocked. It's a good way to learn how SMTP works, not a way to check a list.

Search for the address

Searching the web for the exact address can turn it up on a company page or in a press release, which is good evidence it's real. Not finding it proves nothing.

A verifier combines these checks, runs them from infrastructure built for the job, handles retries and catch-all detection, and does it for thousands of addresses at once.

Single, bulk or API: choosing how to verify

MethodBest forHow it works in Skrap.ai
Single checkOne address before a personal emailPaste the address into the verifier; the free tool works without signup, with a daily limit
Bulk CSV uploadLists before a campaign or an importUpload a CSV, see the estimated credit cost before processing, and download results for 30 days
REST APISign-up forms, CRMs and automated pipelinesCall the API and act on the status in your own code

There's also a Google Sheets add-on for lists that live in a spreadsheet, and a browser extension for checking addresses while you research. For automated flows, our API to CRM workflow shows the pattern end to end.

Frequently asked questions

Can you verify an email address without sending an email?

Yes. A verifier checks the syntax, looks up the domain's MX records, then opens an SMTP conversation with the mail server and asks whether it will accept mail for the recipient (the RCPT TO step). It closes the connection before any message content is sent, so nothing is delivered to the person.

Why did my verification come back Unknown?

Unknown means the mail server didn't give a usable answer. Common causes are timeouts, temporary 4xx errors, and greylisting, where a server deliberately defers unfamiliar senders. Hold the address back and re-verify it later. In Skrap.ai, Unknown results are free.

What's the difference between Risky and Invalid?

Invalid means the address will not receive mail: the syntax is wrong, the domain can't receive email, or the server rejected the mailbox. Risky usually means the domain is catch-all, so it accepts mail for any address and the specific mailbox can't be confirmed. Remove Invalid addresses; send to Risky ones only in a separate, smaller segment.

Is sending a test email a good way to verify an address?

Not for more than the odd address. Every invalid address you test becomes a real hard bounce on your own sending domain, which counts against your sender reputation. Catch-all domains also accept test emails whether or not the mailbox exists, so the test can't tell you much there.

Does verifying an email cost credits on Skrap.ai?

A Valid or Risky result costs 1 credit. Invalid and Unknown results are free. You can also try single checks with the free verifier tool without signing up, within a daily limit.

Skrap.ai Team

The people building Skrap.ai's verifier, finder and lead search. Written from what we see in real lists.

Share

Your Next Customer Is JustOne Search Away

No credit card required100 one-time free credits