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.com and address literals such as user@[192.168.0.1] or user@[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:

InputMessage
john..doe@example.comTwo dots in a row are not allowed in the local part
user.@example.comThe local part cannot end with a dot
jane@@example.comThere is more than one @ in this address
user@-example.comA domain label cannot begin with a hyphen
user@exa_mple.comThe character "_" is not allowed in a domain
jane@exampleA domain needs at least one dot, so that it has a top level domain
user@1.2.3.4An 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.commailto: 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:

RowAnswer
Top level domainwhether it is in the root zone, and whether it is generic or belongs to a country
Disposablewhether the domain, or a domain above it, is on a list of more than 8,000 throwaway domains
Accepts mailthe MX records in order of priority; without MX, the A or AAAA record that RFC 5321 lets a sender use instead
Mail security recordsSPF, 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.