ravn
Guide

How email verification works, step by step.

A verifier checks an address in layers: is it well formed, does the domain exist and accept mail, and will the mail server accept this exact recipient. It does all of this without sending a message, and when a layer cannot give a clear answer the honest result is unknown.

By Ravn · 3 November 2026

Start free: 1,000 lookups Read the docs

The layers

What checks happen, in what order?

Each layer is cheaper than the next, so a verifier stops as soon as one fails.

  1. / 01

    Syntax

    Is the address shaped like an email: one @, a sensible local part, a domain with a dot? Typos like jane@acme,com fail here. Result: bad_syntax.

  2. / 02

    Domain lookup

    Does the domain exist in DNS at all? A domain that does not resolve cannot receive mail. Result: domain_not_found.

  3. / 03

    MX records

    Does the domain publish mail servers? MX records name the servers that accept mail for the domain. No MX means nowhere to deliver. Result: no_mx.

  4. / 04

    Lists

    Is the domain a known disposable (throwaway) provider? Is the local part a role like info@ or support@? Is it a free provider? These are flags, not failures.

  5. / 05

    Mailbox (SMTP) check

    Connect to the mail server and ask whether it would accept this recipient, then hang up before any message is sent. A clear yes or no settles the question.

  6. / 06

    Catch-all test

    Ask about an address that should not exist. If the server accepts that too, every yes from it is meaningless, and the address is risky rather than valid.

The core check

How can you check a mailbox without sending an email?

Email delivery uses SMTP, a conversation between two servers. The sending side says hello, names the sender with MAIL FROM, then names each recipient with RCPT TO. The receiving server replies to each line with a code. A 250 reply to RCPT TO means "I will accept mail for this person". A 550 reply usually means "no such user".

A verifier walks through that conversation up to the recipient line, reads the reply, and then quits before the DATA step where the message body would go. Nothing is delivered and nobody receives anything. This is the only way to learn about a specific mailbox from the outside, and it depends entirely on the receiving server answering honestly.

Flags

What are disposable domains and role accounts?

Disposable domains hand out temporary inboxes that expire after minutes or days. People use them to get past sign-up forms. The address may be valid today and dead tomorrow, so it is worth flagging even when the mailbox exists.

Role accounts are addresses for a function rather than a person: info@, sales@, admin@, support@. They often reach several people, or a ticket queue. They are real, but they behave differently from a personal inbox, and some senders keep them out of marketing lists.

Free providers such as large webmail services tell you the address is personal rather than tied to a company domain. That matters for B2B work even when the mailbox is fine.

The grey areas

What is greylisting, and why does it confuse verifiers?

Greylisting is an anti-spam technique. When a server sees a new sender for the first time, it replies with a temporary failure (a 4xx code) and asks it to try again later. Real mail servers retry after a few minutes and get through. Many spam tools never retry, so they are filtered out cheaply.

For a verifier, a temporary failure is not an answer. The mailbox might exist or not. Retrying later can help, but some servers keep deferring, and some rate-limit or block connections that look like probing. Large mailbox providers often accept every recipient at the SMTP stage and decide later, which makes the check uninformative there too.

Honest results

Why does "unknown" exist as a result?

Because sometimes the server will not say. Timeouts, greylisting, blocked connections and providers that accept everything all end in the same place: the mailbox was not confirmed either way. A verifier can either admit that, or guess.

Ravn admits it. validate_email returns one of four statuses: valid, invalid, risky or unknown. It also reports mailbox_checked, so you can see whether the SMTP step ran. The mailbox check runs only where it is enabled, and if the mailbox was not checked the result is never valid. A risk_score from A to F summarises everything in one grade, and reason says why, for example mailbox_exists, mailbox_not_found or domain_accepts_mail.

A practical rule: send to valid with grade A or B, drop invalid, and handle risky and unknown by reason. The list verification playbook walks through it, and the email verification API page documents every field.

Try it

How do you run a check yourself?

One address from the CLI, up to 1,000 in one REST call, or a whole CSV.

# One address
npx ravn validate_email --email jane@acme.com

# Up to 1,000 addresses, one verdict per unique address
curl https://api.askravn.com/v1/tools/validate_emails \
  -H "Authorization: Bearer $RAVN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emails": ["jane@acme.com", "info@acme.com"]}'

# A whole file, keeping your columns and adding rw_* results
npx ravn enrich list.csv --tool validate_email --column Email --out verified.csv
Freshness

How long does a verification result stay true?

Not forever. People leave jobs, companies close mailboxes and domains lapse. A result describes the address on the day it was checked. Re-verify before a large send if the list has been sitting for a few months. Each check uses one lookup, and a miss is free. You can try single addresses at no cost with the free email verifier.

FAQ

Common questions.

All questions →

Does email verification send a message to the person?

No. The check stops before the message step of the SMTP conversation. Nothing is delivered and the person sees nothing.

What is the difference between risky and unknown?

Risky means the check finished but found a reason for caution, such as a catch-all or disposable domain. Unknown means the mail server would not give a clear answer about the mailbox.

Why do some big webmail addresses come back unknown?

Some large providers accept every recipient during the SMTP conversation and decide later, or limit probing. The mailbox cannot be confirmed from outside, so the honest result is not valid.

Is a role account like info@ invalid?

No. Role accounts are often real and deliverable. They are flagged with role_account so you can decide whether they belong on your list.