The most comprehensive email validation library for JavaScript & TypeScript 📧✨
A lightweight, fast, and developer-friendly email validation library that provides multiple layers of validation including RFC 5322 compliance, DNS/MX record verification, and real-time deliverability checking through popular APIs.
- ✅ RFC 5322 Compliant - Industry-standard email format validation
- 🌐 DNS & MX Verification - Check if domains can actually receive emails
- 📧 Deliverability Testing - Integration with ZeroBounce, Mailgun, and Hunter APIs
- 🚀 Lightning Fast - Optimized performance with minimal dependencies
- 🔧 Highly Configurable - Choose exactly which validation layers you need
- 📱 Universal Support - Works in Node.js, browsers, React, Vue, Angular
- 💪 TypeScript First - Full type safety with excellent IntelliSense
- 📊 Batch Processing - Validate thousands of emails efficiently
- 🛡️ Production Ready - Used by companies worldwide
```bash npm install robust-email-validator ```
```javascript import { EmailValidator } from 'robust-email-validator';
// Quick format validation const isValid = EmailValidator.validateFormat('user@example.com'); console.log(isValid); // true
// Comprehensive validation const validator = new EmailValidator({ checkFormat: true, checkDNS: true, checkDeliverability: true, apiProvider: 'zerobounce', apiKey: 'your-api-key' });
const result = await validator.validate('user@example.com'); console.log(result.isValid); // true/false console.log(result.details); // Detailed validation results ```
- Features
- Installation
- Quick Examples
- API Reference
- Configuration
- Browser Support
- Framework Integration
- Performance
- Contributing
- License
Feature | Description | Node.js | Browser |
---|---|---|---|
Format Validation | RFC 5322 compliant regex validation | ✅ | ✅ |
DNS Verification | Check if domain exists | ✅ | ❌ |
MX Record Check | Verify mail server configuration | ✅ | ❌ |
Deliverability | Real-time API validation | ✅ | ✅* |
*Subject to CORS policies
- ZeroBounce - Industry-leading email validation
- Mailgun - Reliable email verification service
- Hunter - Professional email finder and verifier
- Zero Configuration - Works out of the box
- Flexible Options - Enable only what you need
- Detailed Results - Comprehensive validation reports
- Error Handling - Graceful failure with detailed error messages
- TypeScript Support - Full type definitions included
```bash
npm install robust-email-validator
yarn add robust-email-validator
pnpm add robust-email-validator ```
```javascript import { EmailValidator } from 'robust-email-validator';
// Synchronous format checking const emails = [ 'valid@example.com', // ✅ Valid 'invalid-email', // ❌ Invalid 'user+tag@domain.co.uk' // ✅ Valid ];
emails.forEach(email => { const isValid = EmailValidator.validateFormat(email); console.log(`${email}: ${isValid ? '✅' : '❌'}`); }); ```
```javascript const validator = new EmailValidator({ checkFormat: true, checkDNS: true, checkMX: true, checkDeliverability: true, apiProvider: 'zerobounce', apiKey: process.env.ZEROBOUNCE_API_KEY, timeout: 10000 });
const result = await validator.validate('user@example.com');
console.log('Email:', result.email); console.log('Valid:', result.isValid); console.log('Errors:', result.errors); console.log('Warnings:', result.warnings);
// Detailed breakdown if (result.details.format) { console.log('Format valid:', result.details.format.isValid); } if (result.details.dns) { console.log('Domain exists:', result.details.dns.isValid); console.log('MX records:', result.details.dns.mxRecords); } if (result.details.deliverability) { console.log('Deliverable:', result.details.deliverability.isDeliverable); console.log('Confidence:', result.details.deliverability.confidence); } ```
```javascript const emails = [ 'user1@example.com', 'user2@invalid-domain.xyz', 'invalid-format-email' ];
const results = await validator.validateBatch(emails);
console.log('Summary:', results.summary); // { total: 3, valid: 1, invalid: 2, processed: 3, failed: 0 }
results.results.forEach(result => { console.log(`${result.email}: ${result.isValid ? '✅' : '❌'}`); }); ```
```javascript // Browser-safe configuration const validator = new EmailValidator({ checkFormat: true, checkDeliverability: true, apiProvider: 'mailgun', apiKey: 'your-mailgun-key' });
// Use in form validation document.getElementById('email-form').addEventListener('submit', async (e) => { e.preventDefault(); const email = document.getElementById('email').value;
const result = await validator.validate(email); if (result.isValid) { // Proceed with form submission console.log('Email is valid!'); } else { // Show validation errors console.log('Errors:', result.errors); } }); ```
```typescript interface EmailValidationOptions { checkFormat?: boolean; // Default: true checkDNS?: boolean; // Default: false checkMX?: boolean; // Default: false checkDeliverability?: boolean; // Default: false apiProvider?: 'zerobounce' | 'mailgun' | 'hunter'; apiKey?: string; timeout?: number; // Default: 5000ms } ```
```javascript // Real-time form validation (fast) const formValidator = new EmailValidator({ checkFormat: true });
// Registration validation (balanced) const registrationValidator = new EmailValidator({ checkFormat: true, checkDNS: true });
// Enterprise validation (comprehensive) const enterpriseValidator = new EmailValidator({ checkFormat: true, checkDNS: true, checkMX: true, checkDeliverability: true, apiProvider: 'zerobounce', apiKey: process.env.ZEROBOUNCE_API_KEY }); ```
```jsx import { useState } from 'react'; import { EmailValidator } from 'robust-email-validator';
function EmailInput() { const [email, setEmail] = useState(''); const [isValid, setIsValid] = useState(null);
const validateEmail = async (value) => { const result = await EmailValidator.isValid(value); setIsValid(result); };
return ( <input type="email" value={email} onChange={(e) => { setEmail(e.target.value); validateEmail(e.target.value); }} style={{ borderColor: isValid === false ? 'red' : 'green' }} /> ); } ```
```vue <input v-model="email" @input="validateEmail" :class="{ invalid: !isValid }" type="email" />
<script> import { EmailValidator } from 'robust-email-validator'; export default { data() { return { email: '', isValid: null }; }, methods: { async validateEmail() { this.isValid = await EmailValidator.isValid(this.email); } } }; </script>```
```typescript import { Component } from '@angular/core'; import { EmailValidator } from 'robust-email-validator';
@Component({ selector: 'app-email-input', template: ` <input [(ngModel)]="email" (input)="validateEmail()" [class.invalid]="!isValid" type="email" /> ` }) export class EmailInputComponent { email = ''; isValid: boolean | null = null;
async validateEmail() { this.isValid = await EmailValidator.isValid(this.email); } } ```
Operation | Time | Memory |
---|---|---|
Format validation | ~0.1ms | ~1KB |
DNS validation | ~100ms | ~2KB |
API validation | ~500ms | ~3KB |
Batch (100 emails) | ~2s | ~10KB |
We welcome contributions! Please see our Contributing Guide for details.
```bash git clone https://github.com/otitoju/robust-email-validator.git cd robust-email-validator npm install npm test ```
MIT © Your Name
- RFC 5322 specification
- Email validation community
- All contributors and users
⭐ Star us on GitHub • 📖 Documentation • 🐛 Report Bug • 💡 Request Feature
Made with ❤️ for the JavaScript community