Examples, that other validators pass:
invalid email | reason |
---|---|
[email protected] | Gmail don't allows "_" and "-" symbols |
[email protected] | "8avymt4v93mvt3t03.com" isn't real domain and dont have DNS MX records |
s!o#m$e%o^n&[email protected] | 99.99% public email providers allow only "a-z","0-9",".","_","-","+" before "@" part |
[email protected] | possibility of adding your blocklist of domains and MX domains |
Works in Browser and Node. TypeScript and JavaScript.
Please install NPM package (works in browser also)
npm install email-validator-dns-provider-rules --save
Validation:
import { isValidEmail } from "email-validator-dns-provider-rules";
if (!await isValidEmail('[email protected]')) {
alert('Your email is invalid');
}
Showing details:
import { isValidEmail, getLastInvalidText } from "email-validator-dns-provider-rules";
if (!await isValidEmail('[email protected]')) {
alert('Please correct your email: ' + getLastInvalidText());
}
You can use getLastInvalidReasonId() and make dictionary with your version of text:
const CUSTOM_INVALID_TEXT = {
[INVALID_REASON_AMOUNT_OF_AT]: 'no @ symbol or too many of them',
[INVALID_REASON_USERNAME_GENERAL_RULES]:
'invalid username before @ by general email rules',
[INVALID_REASON_DOMAIN_GENERAL_RULES]:
'invalid domain after @ by general domain rules',
[INVALID_REASON_NO_DNS_MX_RECORDS]: 'domain after @ has no DNS MX records',
[INVALID_REASON_DOMAIN_IN_BLOCKLIST]: 'email domain is in blocklist',
[INVALID_REASON_USERNAME_VENDOR_RULES]:
'invalid username before @ by domain vendor rules',
};
const yourBlocklistDomains = ['somedomain.com', '...'];
isValidEmail('[email protected]', yourBlocklistDomains);
You can choose other DNS over HTTPS provider or even create your own
isValidEmail('[email protected]', null, 'https://your-provider-site/dns-query');
npm test
npm i -g typescript
tsc