An email address is invalid when it violates RFC 5322 syntax, has no @ symbol, lacks a domain, contains illegal characters, or fails MX/SMTP checks. Common invalid formats: missing @ (user.example.com), missing domain (user@), spaces (user @example.com), and invalid characters. For deliverability, an address can be syntactically valid but functionally invalid (dead mailbox, fake domain) — only server-side verification catches both.
Invalid Email Address Formats: Validation Logic Explained
"Invalid email address format" errors are common in signup flows, list cleaning results, and user feedback. The term covers everything from obvious typos to subtle RFC compliance issues to deliverability problems. This guide covers what makes an email address invalid, the difference between format-invalid and deliverability-invalid, and how to handle both in your sender systems.
What makes an email address format invalid
Per RFC 5322, an email address consists of:
- Local part (before the @)
- @ symbol
- Domain (after the @)
For the address to be format-valid:
| Component | Rules |
|---|---|
| Local part | Letters, numbers, and these characters: ., -, +, _. No leading/trailing dots, no consecutive dots |
| @ symbol | Exactly one, separating local and domain |
| Domain | Letters, numbers, dots, dashes. Must have at least one dot. TLD required |
| Total length | Maximum 254 characters per RFC 5321 |
Common invalid formats:
user.example.com— no @ symboluser@— no domain@example.com— no local partuser @example.com— spaceuser@example— no TLDuser@@example.com— multiple @ symbols[email protected]— leading dot in local[email protected]— leading dot in domainuser@example.— trailing dot in domain
Edge cases that are valid (but look weird)
Some formats are valid per RFC but commonly rejected by overly strict validators:
| Address | Validity |
|---|---|
[email protected] | Valid (plus is allowed) |
[email protected] | Valid (single dots allowed) |
[email protected] | Valid (subdomain allowed) |
[email protected] | Valid (numeric local) |
用户@example.com | Valid per RFC 6531 (internationalized) but support varies |
[email protected] | Valid (punycode internationalized domain) |
If your validation rejects these, you're losing legitimate signups. Use permissive validation client-side; let server-side verification handle nuances.
Common typos and patterns
The most-common invalid email address patterns I see in client list audits:
| Pattern | Example | Type |
|---|---|---|
| Common domain typos | [email protected], [email protected] | Format valid, domain invalid |
| TLD typos | [email protected] (should be .com) | Format valid, domain may not exist |
| Wrong domain | [email protected] (double dot) | Format invalid |
| Trailing characters | [email protected], | Format invalid (trailing comma) |
| URL-encoded | user%40example.com | Format invalid (% instead of @) |
| Phone numbers | 5551234567 | Format invalid (no @) |
For typo-prevention, "did you mean?" suggestions catch the common domain typos (gnail.com → gmail.com). Libraries like Mailcheck.js implement this in JavaScript.
Format-valid but deliverability-invalid
An address can be perfectly formatted and still undeliverable:
| Address | Format | Deliverability |
|---|---|---|
[email protected] | Valid | Maybe valid (depends if mailbox exists) |
[email protected] | Valid | Invalid (domain doesn't exist) |
[email protected] (closed account) | Valid | Invalid (mailbox closed) |
[email protected] | Valid | Often unwanted (role account) |
[email protected] | Valid | Likely unwanted (disposable) |
Format validation catches one set of problems. Deliverability validation catches another. You need both for clean lists.
Validation layers
The complete validation stack:
- Client-side syntax (HTML5 or simple regex): catches typos, missing @, etc.
- Server-side syntax (re-check on backend): catches users bypassing client validation
- MX record check: confirms the domain exists and accepts mail
- SMTP handshake: confirms the mailbox accepts connections (without actually sending)
- Role/disposable check: flags role accounts and disposable providers
- Catch-all detection: identifies domains accepting any address
- Spam trap database check: flags known honeypots
Layers 1-2 are basic; layers 3-7 require a verification API. See email verification tools compared for vendor options.
Handling invalid email addresses
When an address shows as invalid in your list or signup flow, the right action depends on the type:
| Status | Action |
|---|---|
| Format invalid (typo) | Reject with helpful error message at signup |
| Domain doesn't exist | Suggest correction if typo, otherwise reject |
| Mailbox closed (hard bounce) | Suppress permanently |
| Soft bounce (full mailbox) | Retry up to 3-5 times, then suppress |
| Role account | Accept or reject per business rules |
| Disposable | Usually reject for account signups, sometimes OK for newsletters |
| Catch-all | Accept with flag, monitor bounce rate |
| Spam trap | Suppress immediately, never re-add |
For ongoing list maintenance, all of these statuses translate into suppression rules. See the email list hygiene guide.
User-facing error messages
When rejecting invalid addresses at signup, the error message matters for conversion:
| Problem | Bad error message | Better error message |
|---|---|---|
| Format invalid | "Invalid email" | "Please check your email format — looks like @ or domain is missing" |
| Domain typo suspected | "Email not found" | "Did you mean [email protected]?" |
| Role account blocked | "Email rejected" | "Please use a personal email instead of info@" |
| Disposable blocked | "Email invalid" | "Please use a permanent email — temporary addresses like mailinator aren't supported" |
| Generic API failure | "Error" | "We couldn't verify that email. Try a different address or contact support." |
Helpful errors recover more legitimate signups. Generic errors lose users.
Practitioner note: I worked with a B2B SaaS that was rejecting all addresses with
+symbols ([email protected]) because their regex was overly strict. They lost an estimated 3-5% of signups from users with corporate plus-tag conventions. Permissive client-side validation plus server-side verification catches real problems without rejecting valid users.
What "must be a valid email address" really means
When a form says "Please enter a valid email address," it typically means:
- Format must be syntactically correct
- HTML5 input type='email' or equivalent server-side check passed
It doesn't necessarily mean:
- The address actually exists
- The mailbox accepts mail
- The address isn't disposable or role-account
Most forms don't run real verification. The "valid email" check is format only. This is fine for many use cases (lower-stakes signups) and insufficient for others (where the address needs to actually work).
When invalid addresses come from elsewhere
Sometimes invalid addresses enter your list through means other than signup form:
- CRM imports of contact data from other systems
- Integration sync from partner platforms
- Manual data entry by team members
- Public records or B2B data imports
For these sources, run verification against the imported data before adding to your active sending list. Verification at import is the analog of verification at signup.
Compliance considerations
When rejecting invalid addresses, you're typically just preventing signup. Compliance implications are minor unless:
- Required by industry-specific regulation (financial services, healthcare may have minimum verification standards)
- GDPR right-to-correction requires you to allow users to fix invalid stored data
- Service-level agreements require certain validation rigor
For most consumer and B2B contexts, rejecting clearly invalid addresses at signup is standard practice with no compliance concerns.
Tools for invalid email handling
For real validation beyond syntax:
| Tool category | Examples |
|---|---|
| Verification APIs | ZeroBounce, NeverBounce, Kickbox, AbstractAPI |
| Built-in ESP validation | Most major ESPs have basic checks |
| Form libraries | Mailcheck.js for typo suggestions |
| Custom backend | Roll your own MX/SMTP check (not recommended) |
For most teams, a verification API plus simple client-side regex catches the bulk of invalid addresses with minimal effort.
If you need help building signup validation that catches invalid addresses without rejecting legitimate users, or cleaning a list that's accumulated invalid records, book a consultation. I work with B2B and SaaS teams on signup infrastructure and list management.
Sources
- RFC 5322 — Internet Message Format
- RFC 5321 — SMTP
- RFC 6531 — Internationalized Email
- MDN HTML input type='email'
- Email address (Wikipedia)
v1.0 · May 2026
Frequently Asked Questions
What is a valid email address?
A valid email address has a local part, an @ symbol, and a domain with at least one dot. RFC 5322 defines acceptable characters: letters, numbers, dots, dashes, plus signs, and underscores in the local part; letters, numbers, dots, and dashes in the domain. The domain must have MX records or A records to accept mail. Format-valid but undeliverable addresses also exist.
What makes an email address format invalid?
Missing @ symbol, missing domain, missing TLD, illegal characters in local part or domain, multiple @ symbols, leading or trailing dots, or any space characters in the address. Common typos: '[email protected]' (valid format but wrong domain), 'user @example.com' (space invalid), 'user@example' (no TLD). RFC 5322 is the authoritative spec.
What does 'must be a valid email address' mean in forms?
The form validation rule that the input must match email format rules. Typically enforced via HTML5 input type='email' or JavaScript regex check. Catches obvious format errors (missing @, etc.) but doesn't verify the address is actually deliverable. Even if your form says 'valid email address,' the address may still bounce when you send to it.
Why is my email address showing as invalid?
If a service marks your address as invalid, common causes: typo in the address, the domain has no MX records, the mailbox is full or deactivated, your address is on a disposable email provider blocklist, or the validation service uses overly strict criteria. For senders seeing 'invalid' addresses in their list: typically dead addresses (closed accounts, abandoned domains) that should be suppressed.
What's the correct email address format?
Local part + @ + domain. Local part: letters, numbers, dots, dashes, plus signs, underscores. Domain: letters, numbers, dots, dashes, with at least one dot separating the TLD. Maximum 254 characters total per RFC 5321. Internationalized addresses (with non-ASCII characters) are technically valid under RFC 6531 but support varies.
Want this handled for you?
Free 30-minute strategy call. Walk away with a plan either way.