Email Validator
Check whether an email address is written correctly, and whether its domain can receive mail at all, without sending a single message.
Overview
Three different questions get called email validation: whether the address is written correctly, whether the domain can receive mail, and whether that particular mailbox exists. This tool answers the first two. The third cannot be answered honestly without sending mail: a server that replies to a probe describes its own configuration, not the mailbox, and many accept every address on purpose.
Web interface
One address checks the syntax as you type, in the browser, and marks the character that is
wrong. For a valid address it shows the local part, the domain and whether it is a role address such as
info@. Check the domain is a separate button, because it sends the domain, and
only the domain, to this site's server. Mail security records adds six more lookups to it.
A list checks the syntax of many addresses at once, one per line or separated by commas, and marks the ones that appear more than once. It makes no network requests. The dice in each input loads a random example: an address, valid or not, or a list.
What the syntax check follows
- the grammar of RFC 5322, including quoted local parts such as
"john doe"@example.comand address literals such asuser@[192.168.0.1]oruser@[IPv6:2001:db8::1]; - the limits of RFC 5321: 64 characters before the
@, 255 after it, 254 in total; - RFC 6531 for addresses in other scripts, such as
пользователь@пример.рф; - domain labels without a hyphen at either end and at most 63 characters long, a top level domain that is
not all digits, and at least one dot. RFC 5321 also allows a bare host name such as
localhost, but no address of that kind works on the internet.
Measured against PHP's filter_var over nearly fifteen thousand candidates: nothing it accepts is
rejected here, and the only addresses accepted here that it refuses have a top level domain beginning with a
digit, which RFC 1123 allows.
Messages
Every rejection says what is wrong and where, counted in characters from 1:
| Input | Message |
|---|---|
john..doe@example.com | Two dots in a row are not allowed in the local part |
user.@example.com | The local part cannot end with a dot |
jane@@example.com | There is more than one @ in this address |
user@-example.com | A domain label cannot begin with a hyphen |
user@exa_mple.com | The character "_" is not allowed in a domain |
jane@example | A domain needs at least one dot, so that it has a top level domain |
user@1.2.3.4 | An IP address has to be written in brackets: [1.2.3.4] |
Jane Doe <jane@example.com> | This is a name with an address in angle brackets, as in a mail header; the address is only jane@example.com |
mailto:jane@example.com | mailto: belongs to a link, not to the address; the address starts after it |
Domain check
The domain check answers four things from this site's server:
| Row | Answer |
|---|---|
| Top level domain | whether it is in the root zone, and whether it is generic or belongs to a country |
| Disposable | whether the domain, or a domain above it, is on a list of more than 8,000 throwaway domains |
| Accepts mail | the MX records in order of priority; without MX, the A or AAAA record that RFC 5321 lets a sender use instead |
| Mail security records | SPF, DMARC, MTA-STS, TLS-RPT and BIMI on the domain, and DANE on up to three of its mail exchangers, when switched on |
A domain that publishes a null MX (RFC 7505), a single MX with . as its exchanger, declares that it
accepts no mail, and a sender must not fall back to its address records. example.com publishes one,
and the check says No, the domain publishes a null MX.
A disposable domain is not a broken one: plenty of people use one on purpose, and the list is maintained by hand, so it is neither complete nor beyond dispute. A role address is perfectly valid too; it usually reaches a team rather than a person.
No public API
There is no public API for this tool. The syntax check runs in the browser; the domain check is a request from this page to this site's server, with the domain alone.
Privacy
The part before the @ never leaves the browser. The syntax check and the list run on the page;
only Check the domain sends something, and that is the domain. The server logs the domain it was
asked about, as it logs every lookup; the address itself is never sent.