Skip to content

Email Validator with checking DNS MX records and strict real-life symbols rules

Notifications You must be signed in to change notification settings

andreinwald/email-validator-dns-provider-rules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Email validator with DNS check and provider's rules

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.

Usage

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());
}

Your version of invalid reasons text

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',
};

Passing your blocklist domains

const yourBlocklistDomains = ['somedomain.com', '...'];
isValidEmail('[email protected]', yourBlocklistDomains);

Passing your DOH provider

You can choose other DNS over HTTPS provider or even create your own

isValidEmail('[email protected]', null, 'https://your-provider-site/dns-query');

Testing

npm test

Generating d.ts

npm i -g typescript
tsc

About

Email Validator with checking DNS MX records and strict real-life symbols rules

Resources

Stars

Watchers

Forks