mail-validatr is a lightweight Node.js library and CLI tool for validating email addresses.
It checks syntax, domain validity, and MX records to ensure an email address is not just well-formed, but also likely to exist.
- 📬 Syntax Validation — Checks if an email matches standard formats.
- 🌐 Domain Verification — Verifies if the domain is real and reachable.
- 📨 MX Record Lookup — Confirms that the domain accepts emails (via MX records).
- ⚡ Fast and Lightweight — Minimal dependencies, fast execution.
- 🛠️ CLI and Programmatic API — Use in scripts or integrate into your Node.js apps.
- 🛡️ Custom Rules — Add custom validation rules or disposable email lists.
- ✅ Recommended Check — Indicates if the email is valid and free of warnings.
Install the library via npm:
npm install mail-validatr
For global CLI usage:
npm install -g mail-validatr
Import and use the validateEmail
function:
import { validateEmail } from "mail-validatr";
async function checkEmail() {
const result = await validateEmail("user@example.com");
console.log(result);
}
checkEmail();
Example output:
{
"isValidSyntax": true,
"hasValidDomain": true,
"hasMxRecords": true,
"warnings": [],
"recommended": true
}
For environments without network access, you can skip DNS and MX record validation:
await validateEmail("user@example.com", { skipDnsCheck: true });
You can define custom rules for additional validation:
const customRules = [
(email: string) =>
email.endsWith("@example.com")
? { code: "example_com_not_allowed", message: "Emails from example.com are not allowed." }
: null,
];
await validateEmail("user@example.com", { customWarningRules: customRules });
Example output with warnings:
{
"isValidSyntax": true,
"hasValidDomain": true,
"hasMxRecords": true,
"warnings": [
{
"code": "example_com_not_allowed",
"message": "Emails from example.com are not allowed."
}
],
"recommended": false
}
Validate email addresses directly from the command line:
mail-validatr user@example.com
Output:
[RESULT] Validation result for user@example.com:
- Syntax valid: true
- Domain valid: true
- MX records found: true
- Warnings: None
- Recommended: Yes
Use the --skip-dns
flag to skip DNS and MX record validation:
mail-validatr user@example.com --skip-dns
Enable verbose output with the --verbose
flag:
mail-validatr user@example.com --verbose
- email (string): The email address to validate.
-
options (object, optional):
-
skipDnsCheck (boolean): If
true
, skips DNS and MX record validation. - customDisposableList (string[]): Add custom disposable email domains.
- customWarningRules (Array<(email: string) => { code: string; message: string } | null>): Add custom warning rules.
-
skipDnsCheck (boolean): If
An EmailValidationResult
object:
interface EmailValidationResult {
isValidSyntax: boolean;
hasValidDomain?: boolean;
hasMxRecords?: boolean;
warnings: Array<{ code: string; message: string }>;
recommended: boolean;
}
You can see real-world usage of mail-validatr
in action:
This repository contains:
- Client Demo — Frontend-only validation with syntax + warning checks (Next.js + React + Tailwind).
- Server Demo — Full email validation with DNS & MX lookup using server routes.
-
Build:
npm run build
-
Dev Mode (watch + test):
npm run dev:test
-
Run Tests:
npx vitest
MIT © 2025
Made with ❤️ by Jindrich Bobek