Private betaMailbeam is in private beta — the public API isn't live yet.Join the waitlist

Mailbeam
Email ValidationBy The Mailbeam Team17 min read2 September 2026

Email Address Validation Check: A Complete Guide

The most popular advice about an email address validation check is also the least useful: write a regex, look for an @, and call the address valid. That approach can tell you whether a string resembles an address. It can't tell you whether the domain routes mail, whether the destination server accepts the recipient, or whether a temporary server condition made a good mailbox look unavailable.

A production-grade check is a layered decision pipeline. It separates validation, whether the address is well-formed and technically routable, from deliverability, whether a message is likely to be accepted and reach a usable inbox. The output shouldn't be a boolean. It should include a stable reason code, a confidence score, and a deterministic product action: gate, soften, or re-check later.

Table of Contents

What an Email Address Validation Check Does

A production-grade email address validation check is a layered decision pipeline, not a single boolean check. It begins with the least expensive test, then adds DNS, SMTP, and contextual signals only when earlier results justify the next step. Syntax parsing comes first, DNS and MX resolution follows, and SMTP probing comes later when policy and provider behavior allow it. Enrichment can then identify addresses that are role-based, disposable, catch-all, or hosted by a free provider.

The order prevents wasted work. A malformed string should not trigger a DNS query, and a domain without usable mail routing should not consume an SMTP connection. The technical overview of email validation checks describes this sequence through syntax, MX lookup, and SMTP probing.

A three-step infographic titled The Email Validation Pipeline showing syntax, DNS, and SMTP verification processes.

Validation isn't the same as deliverability

A syntactically valid address may use an unregistered domain. A domain with MX records may advertise a server that rejects the specific recipient. An SMTP server may also refuse a probe temporarily because of greylisting or rate limiting. These results represent different states, so collapsing them into false removes information the product needs.

A useful response can separate:

  • Deterministic failures, such as invalid_format or dns_invalid.
  • Routing failures, such as mx_missing or mx_unreachable.
  • Mailbox outcomes, including an accepted RCPT response, a permanent rejection, or a transient response.
  • Risk signals, such as catch_all, role_based, or disposable.

Practical rule: Treat the reason code as part of your API contract, not as a debugging detail.

The product decision follows the reason

Map each reason code to a fixed action. A signup form can reject malformed input immediately, show a warning for a catch-all domain while continuing to confirmation, and queue a transient SMTP result for a later re-check. That mapping gives product teams three clear choices: gate, soften, or re-check later.

This separation protects user experience and sender reputation. Permission-based lists generally produce fewer bounces, while poor-quality lists can perform much worse. The 2026 email benchmark analysis reports a cross-industry average of 0.7% for 2026, with benchmarked sectors ranging from 0.28% to 0.91%, and cites an older or less curated dataset with a 10.68% all-industry average in 2025. Address quality affects campaign waste, inbox placement, and the reliability of acquisition data.

Syntax Validation Under RFC 5321 and RFC 5322

Syntax is the cheapest layer, but teams routinely overstate what it proves. RFC 5321 defines the SMTP address used for mail transport, while RFC 5322 defines the broader Internet message format. Together, they permit structures that a casual regex often rejects.

A normal address such as user@example.com is straightforward. first.last@sub.example.co and jane+filter@example.com are also ordinary valid forms. More surprising examples can be legal too, including a quoted local part such as "weird but legal"@example.com, depending on the parser and the exact transport context.

Why one regex fails

The local part can be a dot-atom, a quoted string, or an obsolete form that many production systems intentionally refuse. A parser needs to understand escaping, separators, quoted content, and domain rules. It also needs an explicit policy for internationalized addresses and unusual but standards-compliant forms.

Common syntax failures include:

  • Missing the @ separator.
  • Consecutive dots, as in a..b@example.com.
  • A leading or trailing dot in the local part.
  • Unquoted spaces.
  • An overlong local part or total address.

The length boundaries commonly associated with SMTP are a 64-character local part and a 254-character complete address, but those limits should be enforced by a standards-aware library rather than manually embedded in a sprawling pattern.

Address Status Reason
user@example.com Valid format Syntax passes
first.last@sub.example.co Valid format Dot-separated local part and subdomain
jane+filter@example.com Valid format Plus addressing is allowed
a..b@example.com Invalid format Consecutive dots
userexample.com Invalid format Missing @
user.@example.com Invalid format Trailing dot in local part

Return a precise failure

Use a reason such as invalid_format, or a stable equivalent like INVALID_SYNTAX, when parsing fails. Don't label the address “undeliverable” at this point. Syntax validation has established only that the string doesn't meet the parser's selected address grammar.

For implementation details and practical format examples, use Mailbeam's email validation format guide. The important engineering choice is to select a maintained parser, define whether you accept unusual RFC forms, and keep that policy consistent across browser, API, and data-import paths.

DNS and MX Record Lookups

Once syntax passes, the validator examines the domain portion. DNS resolution answers a narrower question than mailbox verification: where should a sending server attempt delivery, if any destination exists?

An MX record identifies a mail exchanger and its priority. An A record can provide a fallback route in situations where no MX record is published, while a CNAME can explain an alias in the DNS chain. These records help the validator understand routing, but they don't prove that a specific mailbox exists.

Read the failure modes separately

A nonexistent domain should produce a different result from a slow resolver. Likewise, a domain with no MX record shouldn't be treated identically to a domain whose advertised mail exchanger can't be reached.

Record Type Present Absent Implication
MX Mail exchangers are published No preferred mail route Check permitted fallback behavior
A Domain resolves to an address No direct address result Domain resolution may fail
CNAME Domain uses an alias No alias in the lookup path Continue with the resolved target
DNS response Resolver returns usable data Timeout or server failure Result may be unknown, not invalid

Useful reason codes at this layer include:

  • dns_invalid, for an invalid or nonexistent domain response.
  • mx_missing, when no usable MX route is found.
  • mx_unreachable, when the advertised route can't be contacted.
  • mx_timeout, when the lookup doesn't complete reliably.

An MX record is necessary for a confident routing decision but not sufficient for mailbox existence. Mail servers can publish records and still reject every recipient, require additional policy checks, or remain unavailable. That's why DNS should narrow the search, not end the pipeline.

Connect DNS results to the user interface

For dns_invalid, an inline message can ask the user to check the domain spelling. For mx_timeout, don't accuse the user of entering a bad address. Preserve the submission, return an unknown state, and retry under controlled conditions.

Mailbeam's MX record checker is useful for inspecting the routing layer independently. Keeping DNS diagnostics visible to engineers also makes support tickets easier to resolve, especially when a customer says that a domain works in their mail client but fails during signup.

SMTP Mailbox Probing

SMTP probing tests the recipient server's response without transmitting message content. The validator opens a connection, identifies itself with EHLO, issues MAIL FROM:<> using the null reverse-path, and then sends RCPT TO:<user@target>.

The recipient server's response to RCPT TO is the closest pre-send signal available for whether that server accepts the address. It still isn't a guarantee that the eventual message will reach the inbox, because filtering, authentication, content policy, and recipient engagement happen later.

A diagram illustrating the five steps of the SMTP mailbox probing protocol for verifying email address validity.

Interpret SMTP replies conservatively

SMTP reply classes matter more than a simplistic “connection succeeded” flag.

  • 250, or another positive completion response, means the server accepted the recipient command.
  • 4yz, a transient negative response, means the address is unknown for now. Queue a re-check.
  • 5yz, a permanent negative response, indicates a hard failure, but the reason still needs interpretation.

A 550 response can mean “user unknown,” but it can also reflect a disabled mailbox, a policy block, or a server protecting itself from probing. Returning RCPT_5XX without preserving the server context makes it difficult to decide whether to reject or investigate.

Expect defensive mail servers

Greylisting temporarily rejects unfamiliar senders and expects a retry. Tarpitting slows suspicious connections. Anti-abuse controls can rate-limit probes or return deliberately vague responses. Some providers accept every recipient and reveal nothing useful until message delivery, which creates a catch-all result rather than a mailbox-level confirmation.

Connection metadata can enrich the response. The banner, STARTTLS support, reverse DNS, and connection timing help operators understand whether the server behaved normally. They shouldn't override the core recipient response without a clearly documented policy.

Engineering boundary: SMTP probing verifies recipient acceptance, not inbox placement.

A transient response should map to a reason such as rcpt_4xx, greylisted, or smtp_unknown. A permanent recipient rejection can map to rcpt_5xx, with a more specific subreason when the provider exposes one. If a server requires TLS before accepting commands, return tls_required rather than presenting the address as malformed.

Catch-All, Role-Based, Free Provider, and Disposable Checks

These checks add context after the core pipeline. They shouldn't all be hard gates, because each one describes a business or confidence property rather than the same kind of technical failure.

A catch-all domain accepts mail for recipients that weren't explicitly proven to exist. The validator tests a randomized address at the same domain. If that address receives the same positive RCPT response, the target response is less conclusive, even when it was accepted.

A role-based address uses a shared function rather than an individual identity. Addresses such as sales@, info@, support@, admin@, and postmaster@ may be valuable for business communication, support, or procurement. Rejecting them automatically can discard legitimate contacts.

Use enrichment as a policy signal

Free-provider classification identifies webmail hosts. That may matter for a B2B lead form, but it shouldn't be confused with invalidity. A consumer product might welcome those addresses, while an enterprise-only workflow may ask for a work address without claiming that a personal mailbox is broken.

Disposable detection compares the domain with a maintained list of temporary providers. It can be useful in account creation, trials, and promotions where a disposable address undermines identity continuity. The policy should still distinguish an outright block from a quarantine or additional confirmation step.

Check Detection Method Confidence Delta Recommended UX
Catch-all Probe a random recipient at the domain Lowers certainty Soften, then confirm ownership
Role-based Match local part against role patterns Context-dependent Soften or route for review
Free provider Classify known webmail domains Usually neutral Accept or request work email by policy
Disposable Match domain against temporary-provider data Can be strongly negative Gate, quarantine, or require review

Plus-addressing deserves special care. person+campaign@example.com can be valid, and an over-strict rule can suppress a real contact. The same caution applies to shared mailboxes. A validator should expose the signal and let the product decide whether the workflow values reach, identity assurance, or lead qualification.

Reason Codes and Scoring Models

A boolean response forces every downstream team to recreate policy. A reason-code contract keeps the verification service responsible for technical interpretation while the product owns the user-facing decision.

A response can include an overall status, a numeric score, and an array of stable reasons. A practical taxonomy might include VALID, INVALID_SYNTAX, INVALID_MX, MX_TIMEOUT, RCPT_OK, RCPT_5XX, RCPT_4XX, CATCH_ALL, ROLE_BASED, FREE_PROVIDER, DISPOSABLE, GREYLISTED, TLS_REQUIRED, and BLACKLISTED.

Make the score explainable

One illustrative model starts at zero, adds 10 points for a syntax pass, 20 points for an MX result, and 50 points for a positive RCPT response. It can add 10 points when the domain isn't catch-all, then subtract between 5 and 30 points for negative enrichment signals. These weights are policy choices, not universal facts, so document them, version them, and test them against your own outcomes.

Reason Code Score Range Meaning UX Action
VALID 80 or higher Strong combined result Accept and continue
RCPT_OK 80 or higher Destination accepted recipient Accept, subject to policy
CATCH_ALL 40 to 79 Recipient can't be confirmed uniquely Soften and request confirmation
ROLE_BASED Policy-dependent Shared mailbox pattern Soften or route for review
MX_TIMEOUT 40 to 79 DNS result is temporarily uncertain Re-check later
RCPT_4XX 40 to 79 SMTP response is transient Queue a retry
INVALID_SYNTAX Below 40 String fails parsing Gate with format error
INVALID_MX Below 40 Domain isn't routable Gate with domain error
DISPOSABLE Policy-dependent Temporary-provider signal Gate or quarantine
RCPT_5XX Below 40 Permanent recipient rejection Gate, unless policy marks it uncertain

Don't let the score hide the reason. Two addresses can have the same score while requiring different messages. INVALID_SYNTAX calls for correction, whereas MX_TIMEOUT calls for patience. Stable codes let the form render precise feedback without duplicating DNS and SMTP logic in every client.

Wiring Verification into Signup and Bulk Flows

The signup path should validate on form submission, not on every keystroke. Keystroke validation creates unnecessary network calls, exposes infrastructure behavior before the user has finished entering the address, and can make transient provider responses feel like typing errors.

A typical backend flow sends the completed address to a verification endpoint, stores the result needed for the business decision, and creates the account only after applying policy. A request might look conceptually like POST /v1/email/verify with the address in the body and an idempotency key attached to prevent accidental duplicate work.

The response should expose fields such as:

  • status, a high-level state like valid, invalid, or unknown.
  • risk_score, the explainable numeric result.
  • reasons, stable codes such as RCPT_OK, CATCH_ALL, or MX_TIMEOUT.
  • checks, optional details for internal logs and support tooling.

Map responses to deterministic actions

A positive MX result followed by an accepted RCPT response can continue to the normal email confirmation flow. A catch-all result should usually trigger a soft warning or require a magic-link confirmation, not an immediate rejection. A syntax failure can return HTTP 422 with invalid_format, allowing the form to show a specific correction message.

The service must also handle operational failures. A rate limit should produce a retryable application state, not a permanent invalid result. Bulk jobs need idempotency keys, resumable batches, and a re-validation policy for records that have aged or previously returned an unknown state.

An infographic showing three steps to integrate email verification into user registration and database management workflows.

For a broader implementation walkthrough, use Mailbeam's guide to verifying email addresses. The same principles apply whether your client is a browser form, a CRM import, or a campaign-preparation job: keep the technical verdict centralized and make the UX mapping explicit.

GDPR Retention and EU-Only Processing

Email addresses are personal data when they identify or can identify a person. That makes verification an architecture concern, not a checkbox added during procurement. Your system should define what it sends to the verifier, what it records, who can access the result, and when raw inputs disappear.

Hashing doesn't automatically remove the compliance obligation. If a hash can be linked back to an address through a leaked salt, a small domain, or other available information, it may still be personal data. Logs, retry queues, uploaded files, traces, and analytics events all need the same retention discipline as the primary request.

Use Case Lawful Basis Retention Residency Processor Terms
Signup verification Document the basis for account creation or confirmation Keep only what supports the workflow Match the user's regulatory requirements DPA, access controls, deletion terms
Bulk list hygiene Establish a documented business purpose and basis Delete raw uploads after processing Prefer the required regional boundary Subprocessor disclosure and instructions
Support investigation Limit access to necessary results Short operational retention Keep support data within approved regions Audit and deletion commitments
Analytics Use aggregated or minimized outputs Retain only useful summaries Confirm analytics transfer paths Define permitted secondary use

EU and regulated buyers should inspect the vendor's DPA, subprocessor list, deletion behavior, breach process, and residency commitments before sending production addresses. Privacy-focused verification also means avoiding indefinite storage of raw verification logs and uploads, a concern highlighted in GDPR email verification guidance.

Quick Reference for Check Types and Reason Codes

Use this table as a runbook for developers, product managers, and support teams. The key distinction is whether the result is deterministic, such as a malformed address, or probabilistic, such as catch-all behavior or a transient SMTP response.

Check or Code Meaning Typical Response Action
Syntax Address grammar check Pass or invalid_format Gate only on failure
DNS Domain resolution Valid, dns_invalid Gate on deterministic failure
MX Mail routing exists Present, mx_missing Gate or investigate
SMTP RCPT Recipient accepted RCPT_OK, RCPT_5XX, RCPT_4XX Accept, gate, or re-check
CATCH_ALL Domain accepts arbitrary recipients Uncertain mailbox existence Soften
ROLE_BASED Shared functional mailbox Context-dependent Soften or review
FREE_PROVIDER Webmail domain detected Usually valid Accept by policy
DISPOSABLE Temporary domain detected High acquisition risk Gate or quarantine
GREYLISTED Temporary SMTP refusal Unknown for now Re-check later
TLS_REQUIRED Server requires encrypted negotiation Probe incomplete Re-check with TLS
BLACKLISTED Negative reputation signal Risk varies by source Soften or investigate
VALID Combined checks support acceptance High-confidence result Gate open

A well-designed system returns the code that explains the decision, not just the decision itself. That lets your signup flow stay predictable while your verification policy evolves.


Mailbeam provides a real-time email verification API that combines syntax, MX, SMTP, disposable, role-based, free-provider, and catch-all checks with a numeric score and machine-readable reason codes. Visit Mailbeam to connect those results to signup gates, confirmation flows, and bulk list hygiene with EU-hosted, GDPR-focused processing.