Email Syntax Validator

Check a list of addresses for well-formed syntax, and catch the domain typos that quietly bounce.

Runs on your deviceEmailWorkingNo account needed

What this tool does

Email Syntax Validator splits each entry at its last @ and tests the two halves separately. The local part must be no longer than 64 characters, must not start or end with a dot or carry two in a row, and must be built from the RFC 5322 atext set — letters, digits and the punctuation the grammar actually permits — so a parenthesis comes back named as an invalid character, while a space anywhere outside a quoted local part fails earlier still, as whitespace, before the two halves are examined at all. The domain must be at most 253 characters across labels of at most 63, with no leading, trailing or doubled dots, no label beginning or ending with a hyphen, and a top-level label that is either two or more letters or a punycode xn-- label. An all-digit top-level domain is refused, and the whole address is capped at 254 characters.

It also handles the shapes that arrive in real lists rather than in specifications. A display-name entry such as Bob Smith <[email protected]> is unwrapped to the address inside and noted as such, a leading mailto: is stripped, a quoted local part is accepted with a note that it is valid but widely unsupported, and a bracketed IP literal is accepted with the same caveat. An internationalised domain written in its Unicode form passes and is flagged; a non-ASCII local part passes with a note that delivery needs SMTPUTF8 support at both ends. Alongside those, the Detail column marks role addresses like info@ and noreply@, plus-addressing, and local parts or domains that look like placeholders.

The Did you mean column compares each domain against a fixed list of forty-three consumer providers using edit distance, and against a short table of top-level misspellings — con, cmo, ocm and vom for com, ogr for org, nte for net. This is deliberately kept separate from the verdict. [email protected] is a perfectly legal address by syntax, so it is marked valid with a warning and a suggested correction rather than rejected, and the tool never invents a fix for a domain it already recognises. Those two halves have different reach, which is worth knowing before you trust a blank column. The misspelling table rewrites the last label of any two-label domain, so [email protected] is corrected to .com even though that company is on no list; the provider list only catches a domain within an edit or two of one of the forty-three, so a garbled company name like [email protected] passes with nothing suggested. Add a subdomain and even the table goes quiet — [email protected] reads as plainly valid.

The limit that matters is what syntax can tell you, which is less than most people want. There is no DNS query, no MX record check and no SMTP probe here, so a flawlessly formed address at a domain that has never existed passes without comment — use MX Lookup to find out whether a domain accepts mail at all. Two rules will also surprise you. user@localhost and anything else with a single-label domain is refused, because the check requires a top-level domain, even though a local mail system would deliver it. And the input is split on commas and semicolons as well as line breaks, so a display name containing a comma is torn into two rows — put one address per line whenever names are involved. Deduplication lowercases the entire address, including the local part that RFC 5321 formally treats as case-sensitive, so Bob@ and bob@ collapse into one row. All of this runs inside your browser tab; the list is never uploaded, which matters because a column of addresses is personal data about other people, not just a file of your own.

How to use it

  1. Paste the addresses. One per line is safest, though commas and semicolons also separate entries. Press Load sample to see the shapes it recognises, including display-name and quoted forms.
  2. Decide what happens to duplicates. Remove duplicates is on by default and matches case-insensitively across the whole address. The first occurrence is kept and the rest are counted in the summary line rather than listed.
  3. Narrow the table if the list is long. Show only problems keeps the invalid rows and the ones carrying a typo suggestion. Leave it off to read the notes on the valid ones too — role addresses, plus-addressing and placeholder-looking entries.
  4. Read the four columns. Address, Status, Detail and Did you mean. Status separates a hard failure from a valid address with a suspicious domain, and Detail names the specific rule that was broken.
  5. Copy the results. The copy button hands you the whole table as CSV, headers included, so it pastes straight into a spreadsheet next to whatever list you started from.

Processing & privacy

Runs on your device. Your file is processed directly in this browser.

Common use cases

Cleaning a signup list before an ESP import

Malformed addresses never had a chance of delivering, and a batch of hard bounces on first send is the fastest way to damage a sending reputation.

Working out why one address keeps failing

Paste the single address and the Detail column names the rule — consecutive dots, a hyphen at the end of a domain label, a stray second @ — instead of leaving you with a bounce code.

Fixing typos from paper forms or phone calls

Transcribed addresses arrive as gmial.com, hotmial.com and yahoo.con. Each of those comes back with a correction in the Did you mean column.

Testing your own form validation

Feed it the awkward but legal shapes — a quoted local part, plus-addressing, an internationalised domain, an IP literal — and see which of them your own regex would have thrown away.

Auditing who is actually on a list

The notes mark info@, support@, billing@ and noreply@ as role addresses, which are usually the entries that should not be receiving marketing at all.

Questions

Does this check whether the mailbox exists?
No. It is a syntax check and nothing else — no DNS query, no MX record lookup, no SMTP connection. An address can pass every rule here and still bounce because the domain has no mail server or the mailbox was closed. MX Lookup answers the domain half of that question.
Are my addresses uploaded anywhere?
No. The parsing, the provider list and the distance comparisons all sit in the page's own JavaScript, so no address you paste is transmitted, logged or stored, and the check still runs once the tab is open and the network is off. (The page itself counts an anonymous visit, as every page here does; your input is no part of that.) Disconnect the wifi and try it if you would rather see that than read it.
Why is user@localhost marked invalid?
Because the domain check requires a top-level domain, so any single-label domain is refused, a@b included. Such an address is deliverable inside a local mail system but is not routable across the internet, and treating it as valid in a list destined for an email service would be misleading.
Why is a .con address called valid?
Nothing in the syntax rules says a top-level domain must be one that exists — .con has the right shape. Marking it invalid would confuse a malformed address with a plausible one, so it is reported as valid with a warning and a suggested fix, and the count of likely typos appears separately in the summary.
Which parts of RFC 5322 does it not implement?
The full grammar permits parenthesised comments and folding whitespace inside an address; both are rejected here, because no mail system in practice expects them in a list. Quoted local parts and address literals are accepted, but each is flagged, since many providers refuse them at signup.
Why did one line become two rows?
Commas and semicolons are treated as separators, so a display name written as "Smith, Bob" <[email protected]> is split in the middle. Put one address per line when names are attached, and each entry stays intact.
How many addresses can it handle?
Nothing in the tool caps the list. Every five hundred addresses it hands control back to the browser so that a long paste cannot freeze the tab, but this workspace draws no progress bar while that happens — a large list simply takes a moment and then the whole table appears at once. The practical ceiling is your device's memory.
Does it change or normalise my addresses?
Only in the two ways described: a display-name wrapper and a leading mailto: are removed so the address inside can be tested, and duplicate matching ignores case. Nothing is lower-cased or rewritten in the table itself — the Address column shows the address as it was read.

Related tools