Support matrix
Which address features each preset accepts, how a Null MX is handled, each provider's rules and their sources, and what's out of scope.
The tables on this page are built from the packages as the site builds: the syntax rows from validator-syntax's test corpus, the provider rows from the classifier's registry, and the rest by running the packages on fixed examples. They describe the versions these docs are built against, and they change only when the packages do.
Address syntax
One row per address feature of RFC 5321 and RFC 5322, plus the forms a preset accepts outside them. A cell says whether the preset, with its default options, accepts the corpus fixtures that are well-formed examples of the feature: Yes for all of them, No for none, and Partial, with a count, for some. The example is one of those fixtures, with any control characters shown as their Unicode symbols, like ␀ for NUL.
| Feature | Example | practical | rfc5321 | rfc5322 | html5 | Defined in |
|---|---|---|---|---|---|---|
| Letters, digits, and single dots | simple@example.com | Yes | Yes | Yes | Yes | RFC 5321 §4.1.2, RFC 5322 §3.2.3 |
Printable specials like +, /, =, and _ | disposable.style.email.with+symbol@example.com | Yes | Yes | Yes | Yes | RFC 5322 §3.2.3 |
Route characters (%, !) | mailhost.com!username@example.org | No | Yes | Yes | Yes | RFC 5322 §3.2.3 |
| Leading, trailing, or consecutive dots | john..doe@example.com | No | No | No | Yes | WHATWG HTML |
| Local part over 64 characters | 1234567890123456789012345678901234567890123456789012345678901234+x@example.com | No | No | Yes | Yes | RFC 5321 §4.5.3.1.1 |
| Quoted local part | " "@example.org | No | Yes | Yes | No | RFC 5321 §4.1.2, RFC 5322 §3.2.4 |
| Backslash escapes in a quoted string | "\a"@iana.org | No | Yes | Yes | No | RFC 5322 §3.2.1 |
| Dot-separated atoms and quoted strings mixed | just."actually".right@example.com | No | No | Yes | No | RFC 5322 §4.4 |
| Comments | (comment)test@iana.org | No | No | Yes | No | RFC 5322 §3.2.2 |
| Whitespace and line folding between tokens | test@ iana .com | No | No | Yes | No | RFC 5322 §3.2.2 |
| Control characters (obsolete syntax) | "test\␀"@iana.org | No | No | Yes | No | RFC 5322 §4.1 |
| IPv4 address literal | test@[255.255.255.255] | No | Yes | Yes | No | RFC 5321 §4.1.3 |
| IPv6 address literal | test@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] | No | Yes | Yes | No | RFC 5321 §4.1.3 |
| Other domain literals | test@[255.255.255] | No | No | Yes | No | RFC 5322 §3.4.1 |
| Domain with no dot | james@google | No | No | No | Yes | WHATWG HTML |
| TLD outside the IANA set | james@google.c | No | Yes | Yes | Yes | IANA root zone |
supportMatrix()
returns the same rows, with every fixture. Presets
describes each preset's rules, and options such as allowComments and
allowIpLiteral change what a preset accepts; previewSyntaxOptions shows
how (see Fixtures).
International addresses
RFC 6531 extends SMTP to UTF-8: non-ASCII characters in the local part, and
domain labels written as U-labels (§3.3). Each cell runs isValidSyntax on
the example with the preset's defaults, then with the option that covers it.
| Feature | Example | practical | rfc5321 | rfc5322 | html5 |
|---|---|---|---|---|---|
| UTF-8 local part | josé@example.com | With allowUnicode | With allowUnicode | With allowUnicode | allowUnicode throws |
| U-label domain | ada@bücher.de | With allowIdn | With allowIdn | With allowIdn | allowIdn throws |
| U-label TLD | ada@пример.рф | With allowIdn | With allowIdn | With allowIdn | allowIdn throws |
See International addresses for what each option accepts and the length caps that still apply.
Null MX
A Null MX (RFC 7505) is an MX record whose host is ., published to say a
domain receives no mail. validator-dns checks it, not validator-syntax, so
presets don't apply. These rows run checkDns on a stub resolver that
answers with the MX records shown and one A record.
| MX answer | checkDns |
|---|---|
| A Null MX alone | Fails with dns.mx.null |
| A Null MX next to another MX | Passes, with nullMx: true and mxHosts: ["mx.example.com"] |
See What's checked for the order validator-dns decides in.
Providers
The classifier's provider registry: each entry's domains and the local-part rules the sanitizer's provider-aware normalization uses. Provider registry says what each field means.
| ID | Name | Kind | Domains | Canonical domain | Dots | Subaddress | Hyphens | Subdomain addressing |
|---|---|---|---|---|---|---|---|---|
gmail | Gmail | personal | gmail.com, googlemail.com | gmail.com | ignored | + | count | no |
google-workspace | Google Workspace | business | none; found by MX | count | + | count | no | |
outlook | Outlook.com | personal | outlook.com and 27 more | count | + | count | no | |
microsoft365 | Microsoft 365 | business | none; found by MX | count | + | count | no | |
yahoo | Yahoo Mail | personal | yahoo.com and 12 more | count | none | count | no | |
aol | AOL Mail | personal | aol.com, aim.com, aol.co.uk, aol.de, aol.fr | count | none | count | no | |
icloud | iCloud Mail | personal | icloud.com, me.com, mac.com | icloud.com | count | none | count | no |
proton | Proton Mail | personal | proton.me, protonmail.com, protonmail.ch, pm.me | count | + | count | no | |
fastmail | Fastmail | personal | fastmail.com and 129 more | count | + | count | yes | |
zoho | Zoho Mail | personal | zoho.com, zohomail.com | count | none | count | no | |
zoho-business | Zoho Mail for business | business | none; found by MX | count | none | count | no | |
yandex | Yandex Mail | personal | yandex.ru, yandex.com, yandex.by, yandex.kz, ya.ru | yandex.ru | count | + | same as dots | no |
yandex-360 | Yandex 360 for Business | business | none; found by MX | count | none | count | no | |
gmx | GMX | personal | gmx.net, gmx.de, gmx.at, gmx.ch, gmx.com, gmx.us, gmx.co.uk | count | none | count | no | |
web-de | WEB.DE | personal | web.de | count | none | count | no | |
mail-ru | Mail.ru | personal | mail.ru, inbox.ru, list.ru, bk.ru, internet.ru | count | none | count | no | |
tuta | Tuta Mail | personal | tuta.com, tutanota.com, tutanota.de, tutamail.com, tuta.io, keemail.me | count | none | count | no | |
hey | HEY | personal | hey.com | count | none | count | no | |
namecheap | Namecheap Email Forwarding | registrar | none; found by MX | count | none | count | no |
Sources
Each entry cites its domains, its MX patterns, and every rule that differs
from the default, from providerSources.
"DNS lookup" marks a fact the provider documents nowhere, read from its DNS
instead. Checked is when the fact was last compared with its source.
| Provider | Rule | Source | Checked |
|---|---|---|---|
| Gmail | domains | https://support.google.com/mail/answer/10313. Messages sent to @gmail.com and @googlemail.com are the same. | 2026-09-29 |
canonicalDomain | https://support.google.com/mail/answer/10313 | 2026-09-29 | |
dotsSignificant | https://support.google.com/mail/answer/7436150. Dots in a Gmail address are ignored. | 2026-09-29 | |
subaddressSeparator | https://support.google.com/mail/answer/12096. Mail to janedoe+school@gmail.com goes to janedoe@gmail.com. | 2026-09-29 | |
mxPatterns | DNS lookup: MX of gmail.com and googlemail.com: gmail-smtp-in.l.google.com and alt1–alt4. | 2026-09-29 | |
| Google Workspace | mxPatterns | https://knowledge.workspace.google.com/admin/domains/set-up-mx-records-for-google-workspace. smtp.google.com, with the pre-2023 aspmx values still supported. The legacy host names are from the MX of domains that still use them. | 2026-09-29 |
dotsSignificant | https://support.google.com/mail/answer/7436150. On work, school, and other organization accounts, dots do change the address. | 2026-09-29 | |
subaddressSeparator | https://support.google.com/mail/answer/12096. Gmail's plus aliases, which the page doesn't limit to personal accounts. | 2026-09-29 | |
| Outlook.com | domains | https://support.microsoft.com/en-us/office/add-or-remove-an-email-alias-in-outlook-com-459b1989-356d-40fa-a689-8f285b13f1f2. Names Hotmail, Live, Outlook.com, and MSN addresses. The country domains are from their MX, which is Outlook.com’s. | 2026-09-29 |
subaddressSeparator | https://support.microsoft.com/en-us/office/add-or-remove-an-email-alias-in-outlook-com-459b1989-356d-40fa-a689-8f285b13f1f2. chester.beane+microsoft@outlook.com arrives in the same inbox. | 2026-09-29 | |
mxPatterns | DNS lookup: MX of every listed domain: <domain>-com, eur, nam, or apc under olc.protection.outlook.com. | 2026-09-29 | |
| Microsoft 365 | mxPatterns | https://learn.microsoft.com/en-us/microsoft-365/enterprise/external-domain-name-system-records. <domain-key>.mail.protection.outlook.com. | 2026-09-29 |
mxPatterns | https://learn.microsoft.com/en-us/exchange/security-and-compliance/how-dane-secures-email. Domains with DNSSEC point at <domain-key>.<subdomain>.mx.microsoft, e.g. contosotest-com.o-v1.mx.microsoft, and drop legacy MX ending in mail.protection.outlook.com, mail.eo.outlook.com, or mail.protection.outlook.de. | 2026-09-29 | |
subaddressSeparator | https://learn.microsoft.com/en-us/exchange/recipients-in-exchange-online/plus-addressing-in-exchange-online. On by default; an organization can turn it off. | 2026-09-29 | |
| Yahoo Mail | domains | https://help.yahoo.com/kb/domain-extensions-yahoo-mail-sln2153.html. Names yahoo.com, myyahoo.com, yahoo.co.uk, and yahoo.fr. ymail.com, rocketmail.com, and the other country domains are from their MX. | 2026-09-29 |
subaddressSeparator | https://help.yahoo.com/kb/SLN28815.html. None. Disposable addresses are nickname-keyword@yahoo.com, where the nickname is not the mailbox name. | 2026-09-29 | |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| AOL Mail | domains | DNS lookup: Every listed domain has MX mx-aol.mail.gm0.yahoodns.net. | 2026-09-29 |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| iCloud Mail | domains | https://support.apple.com/en-us/118230. Every @me.com and @mac.com account also has the @icloud.com address. | 2026-09-29 |
canonicalDomain | https://support.apple.com/en-us/118230 | 2026-09-29 | |
mxPatterns | DNS lookup: MX of every listed domain: mx01 and mx02.mail.icloud.com. | 2026-09-29 | |
| Proton Mail | domains | https://proton.me/support/addresses-and-aliases. proton.me or protonmail.com is chosen at sign-up; they are separate addresses. protonmail.ch and pm.me are from their MX. | 2026-09-29 |
subaddressSeparator | https://proton.me/support/addresses-and-aliases. Plus aliases: ericnorbert+bills@proton.me. | 2026-09-29 | |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| Fastmail | domains | https://www.fastmail.help/hc/en-us/articles/6239365719055-What-domains-can-I-use-with-Fastmail | 2026-09-29 |
subaddressSeparator | https://www.fastmail.help/hc/en-us/articles/360060591053-Plus-addressing-and-subdomain-addressing | 2026-09-29 | |
subdomainAddressing | https://www.fastmail.help/hc/en-us/articles/360060591053-Plus-addressing-and-subdomain-addressing. Works without setup on Fastmail domains; custom domains must turn it on. | 2026-09-29 | |
mxPatterns | https://www.fastmail.help/hc/en-us/articles/360060591153-Manual-DNS-configuration | 2026-09-29 | |
| Zoho Mail | domains | DNS lookup: Both domains have MX smtpin, smtpin2, and smtpin3.zoho.com. | 2026-09-29 |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| Zoho Mail for business | mxPatterns | https://www.zoho.com/mail/help/adminconsole/configure-email-delivery.html. mx, mx2, and mx3.zoho.com, with the TLD varying by data center. The other data centers’ hosts are the ones that resolve in DNS; mx3.zoho.com.cn does not. | 2026-09-29 |
| Yandex Mail | domains | https://yandex.com/support/yandex-360/customers/mail/en/web/preferences/about-sender/additional-addresses. Every mailbox also gets the ru, by, and kz country domains and ya.ru. | 2026-09-29 |
canonicalDomain | https://yandex.com/support/yandex-360/customers/mail/en/web/preferences/about-sender/additional-addresses | 2026-09-29 | |
hyphensSignificant | https://yandex.com/support/yandex-360/customers/mail/en/web/security/strange-letters.html. Yandex Mail doesn’t distinguish between dots and hyphens; they are synonymous addresses of the same mailbox. | 2026-09-29 | |
subaddressSeparator | https://yandex.com/support/yandex-360/customers/mail/en/reg. alice.the.girl+teaforum@yandex.com reaches the mailbox. | 2026-09-29 | |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| Yandex 360 for Business | mxPatterns | https://yandex.com/support/yandex-360/business/admin/en/domains/dns/mx. mx.yandex.net. | 2026-09-29 |
| GMX | domains | DNS lookup: Every listed domain has MX under emig.gmx.net (Germany, Austria, Switzerland) or gmx.net (gmx.com). | 2026-09-29 |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| WEB.DE | domains | DNS lookup: web.de has its own MX, separate from GMX. | 2026-09-29 |
mxPatterns | DNS lookup: MX of web.de. | 2026-09-29 | |
| Mail.ru | domains | DNS lookup: Every listed domain has MX mxs.mail.ru. | 2026-09-29 |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| Tuta Mail | domains | DNS lookup: The domains Tuta offers at sign-up, all with MX mail.tutanota.de. | 2026-09-29 |
mxPatterns | DNS lookup: MX of every listed domain. | 2026-09-29 | |
| HEY | domains | DNS lookup: hey.com is the only domain HEY offers personal addresses on. | 2026-09-29 |
mxPatterns | DNS lookup: MX of hey.com. | 2026-09-29 | |
| Namecheap Email Forwarding | mxPatterns | https://www.namecheap.com/support/knowledgebase/article.aspx/308/2214/how-to-set-up-free-email-forwarding/. Email Forwarding sets the MX records itself; the page doesn’t name the eforward1–5.registrar-servers.com hosts, which resolve in DNS. | 2026-09-29 |
Not supported
Mailbox probing
No package asks a mail server whether a mailbox exists by sending SMTP
RCPT TO. validator-dns's SMTP probe
stops after EHLO: it learns whether a mail server answers, never whether a
mailbox exists.
RCPT TO doesn't answer that question reliably:
- Many servers accept every recipient and bounce later, or deliver anything
for the domain to one mailbox, so a
250doesn't mean the mailbox exists. - Greylisting and rate limits answer with temporary failures, so a
4xxdoesn't mean it doesn't. - Providers treat repeated probes from one address as abuse and block it, which then stops that address's real mail too.
The only proof that a mailbox exists, and belongs to the person who typed it, is mail they receive: send a confirmation link.