Back to Blog
Open SourceDecember 23, 2024

Open Source Email Verifier

We're open sourcing our email verification engine. Free, self-hosted email verification with no limits, no API keys, and no monthly fees.

by the Unlimited team

Open Source Email Verifier

Today we're releasing something we've wanted to do for a long time: a completely free, open source email verification tool.

No API keys. No usage limits. No monthly fees. Just clone the repo, run it, and verify as many emails as you want.

Why Open Source?

Email verification shouldn't be gatekept behind expensive SaaS subscriptions for basic use cases.

If you're a developer who needs to verify emails in a side project, you shouldn't have to pay $50/month. If you're a startup validating signups, you shouldn't need to worry about per-email costs eating into your runway.

We built Unlimited Verifier as a business, but we also believe the core verification logic should be accessible to everyone.

What's Included

The open source version includes everything you need for production-grade email verification:

Syntax Validation

Proper RFC 5322 compliant email syntax checking. Not just regex—actual parsing that handles edge cases like:

  • Quoted local parts ("john.doe"@example.com)
  • Plus addressing (user+tag@example.com)
  • International domain names (IDN support)
  • Subaddressing detection

DNS & MX Verification

Full DNS resolution including:

  • MX record lookup with priority ordering
  • Fallback to A/AAAA records when no MX exists
  • DNS timeout handling
  • DNSSEC validation support

SMTP Verification

Real SMTP handshake verification:

  • Connection to mail server
  • HELO/EHLO negotiation
  • MAIL FROM command
  • RCPT TO verification
  • Proper response code handling (250, 450, 550, etc.)

Catch-All Detection

Identify domains configured as catch-all by testing with a known-invalid address pattern. Know when SMTP verification can't give you a definitive answer.

Disposable Email Detection

Built-in database of known disposable email providers (Mailinator, Guerrilla Mail, 10MinuteMail, etc.) with regular updates.

Role-Based Address Detection

Identify role-based addresses like info@, sales@, support@ that might have different deliverability characteristics.

What's NOT Included

To be transparent, here's what the open source version doesn't include:

  • True-Send verification — Our catch-all verification via actual email delivery
  • Deep Verification — Advanced techniques for stubborn mail servers
  • Managed infrastructure — You host it yourself
  • Bounce processing — Real-time bounce handling
  • Dashboard & UI — It's a library/CLI, not a full application

These features require significant infrastructure and ongoing maintenance, which is why they're part of our paid service. But for 80%+ of email verification use cases, the open source version is all you need.

Getting Started

Installation

# Clone the repository
git clone https://github.com/unlimitedverifier/email-verifier

# Install dependencies
cd email-verifier
pip install -r requirements.txt

# Or with npm for the Node.js version
npm install @unlimitedverifier/email-verifier

Basic Usage (Python)

from email_verifier import verify_email

result = verify_email("test@example.com")

print(result.is_valid)        # True/False
print(result.is_deliverable)  # True/False/None (unknown)
print(result.is_catch_all)    # True/False
print(result.is_disposable)   # True/False
print(result.is_role_based)   # True/False
print(result.mx_records)      # List of MX records
print(result.smtp_response)   # Raw SMTP response code

Basic Usage (Node.js)

import { verifyEmail } from '@unlimitedverifier/email-verifier';

const result = await verifyEmail('test@example.com');

console.log(result.isValid);
console.log(result.isDeliverable);
console.log(result.isCatchAll);
console.log(result.isDisposable);
console.log(result.isRoleBased);

Bulk Verification

from email_verifier import verify_emails

emails = [
    "valid@gmail.com",
    "invalid@nonexistent-domain-xyz.com",
    "test@company.com"
]

results = verify_emails(emails, concurrency=10)

for email, result in results.items():
    print(f"{email}: {result.is_deliverable}")

CLI Usage

# Verify single email
email-verify check user@example.com

# Verify from file
email-verify bulk emails.txt --output results.csv

# With options
email-verify bulk emails.txt \
  --concurrency 20 \
  --timeout 10 \
  --output results.json \
  --format json

Configuration

SMTP Settings

from email_verifier import EmailVerifier

verifier = EmailVerifier(
    from_email="verify@yourdomain.com",  # Your sending domain
    helo_host="mail.yourdomain.com",     # HELO hostname
    timeout=10,                           # Connection timeout
    retries=2,                           # Retry attempts
)

Proxy Support

For high-volume verification, you might need to use proxies to avoid rate limiting:

verifier = EmailVerifier(
    proxy="socks5://user:pass@proxy.example.com:1080"
)

Custom Disposable List

Add your own disposable domains:

verifier = EmailVerifier(
    custom_disposable_domains=["tempmail.xyz", "fakeinbox.com"]
)

Self-Hosting Considerations

Running your own email verification has some nuances:

IP Reputation

Mail servers track who's connecting to them. If you verify too aggressively from a single IP, you might get rate limited or blocked.

Recommendations:

  • Use dedicated IPs with clean reputation
  • Implement rate limiting (we suggest 1-2 verifications per second per IP)
  • Rotate IPs for high-volume verification
  • Consider residential proxies for sensitive domains

DNS Caching

MX lookups can be slow. Implement caching:

from email_verifier import EmailVerifier
from email_verifier.cache import RedisCache

cache = RedisCache(host="localhost", port=6379)
verifier = EmailVerifier(cache=cache, cache_ttl=3600)

Greylisting

Some servers temporarily reject new senders. The library handles this automatically with configurable retry logic:

verifier = EmailVerifier(
    greylist_retries=3,
    greylist_delay=300  # 5 minutes between retries
)

Logging

Enable detailed logging for debugging:

import logging
logging.basicConfig(level=logging.DEBUG)

# Or to file
verifier = EmailVerifier(
    log_file="/var/log/email-verifier.log",
    log_level="INFO"
)

Performance Benchmarks

On a decent server (4 cores, 8GB RAM), expect:

| Concurrency | Emails/Second | Emails/Hour | |-------------|---------------|-------------| | 1 | 2-5 | 7,200-18,000 | | 10 | 15-40 | 54,000-144,000 | | 50 | 50-120 | 180,000-432,000 | | 100 | 80-180 | 288,000-648,000 |

Actual throughput depends on target server response times and your network latency.

Accuracy

The open source verifier achieves:

  • 99.9% accuracy on syntax validation
  • 99%+ accuracy on domain/MX verification
  • 95-98% accuracy on SMTP verification (for non-catch-all)
  • 100% catch-all detection (but can't verify individual addresses)

For catch-all domains, you'll get is_deliverable: None indicating we can't determine validity via SMTP. That's where our paid True-Send service comes in.

Contributing

We welcome contributions! Areas we'd love help with:

  • Additional disposable email providers
  • Improved international domain handling
  • Performance optimizations
  • Documentation and examples
  • Language bindings (Ruby, Go, PHP, etc.)

See CONTRIBUTING.md for guidelines.

When to Use the Paid Service

The open source verifier is great for:

  • Development and testing
  • Low-volume verification
  • Self-hosted infrastructure requirements
  • Learning how email verification works
  • Building custom verification pipelines

Consider Unlimited Verifier (paid) when you need:

  • Catch-all verification — True-Send actually delivers test emails
  • Managed infrastructure — We handle IPs, reputation, and scaling
  • Higher accuracy — Deep Verification for edge cases
  • Speed — Distributed verification across multiple servers
  • Support — Help when things go wrong

License

The open source email verifier is released under the MIT License. Use it however you want—personal projects, commercial applications, whatever.

We just ask that if you find it useful, consider starring the repo and spreading the word.

Get Started

Ready to verify emails without limits?

Open Source: github.com/unlimitedverifier/email-verifier

Managed Service: unlimitedverifier.com

Happy verifying.

Verify 1 million emails for $49

Or 10 million. Same price. Unlimited verification.