Email Safeguard
A comprehensive email validation library that provides domain suggestions, disposable email detection, and MX record validation with a focus on security and user experience.

Features
- 🔍 Smart validation with helpful suggestions
- 🛡️ Disposable email detection
- 📨 MX record validation with configurable timeout handling
- ⚡ Fast and customizable
- 🎯 Type hints and modern Python support
- 🔧 Configurable validation rules
- 🔄 Automatic retry mechanism for DNS queries
Installation
pip install email-safeguard
Quick Start
from email_safeguard.validator import EmailSafeguard
validator = EmailSafeguard()
result = validator.validate("user@gmial.com")
if result.is_valid:
if result.suggestions:
print(f"Email is valid but did you mean: {result.suggestions.get('domain')}?")
else:
print("Email is valid!")
else:
print(f"Error: {result.message}")
Advanced Usage
Custom Configuration
validator = EmailSafeguard(
check_mx=True,
allow_disposable=False,
suggest_corrections=True,
max_distance=2,
dns_timeout=3.0,
dns_retries=2,
retry_delay=1.0
)
Timeout Handling
You can control how the validator handles MX record timeouts:
result = validator.validate("example@domain.com", skip_mx_on_timeout=False)
result = validator.validate("example@domain.com", skip_mx_on_timeout=True)
if result.result == ValidationResult.TIMEOUT:
print("DNS query timed out")
Handling Results
from email_safeguard.validator import EmailSafeguard, ValidationResult
validator = EmailSafeguard()
result = validator.validate("user@tempmail.com")
if result.result == ValidationResult.VALID:
print("Email is valid!")
elif result.result == ValidationResult.DISPOSABLE:
print("Disposable emails not allowed")
elif result.result == ValidationResult.INVALID_DOMAIN:
if result.suggestions and 'domain' in result.suggestions:
print(f"Invalid domain. Did you mean: {result.suggestions['domain']}?")
elif result.result == ValidationResult.NO_MX_RECORD:
print("Domain has no mail server")
elif result.result == ValidationResult.TIMEOUT:
print("MX record check timed out")
ValidationResult Types
The library provides several validation result types:
from email_safeguard.validator import ValidationResult
Validation Response
The validate()
method returns a ValidationResponse
object with the following attributes:
class ValidationResponse:
is_valid: bool
result: ValidationResult
message: str
suggestions: Optional[Dict[str, str]]
Performance Tuning
Adjust DNS query settings for your needs:
validator = EmailSafeguard(
dns_timeout=1.0,
dns_retries=1,
retry_delay=0.5
)
validator = EmailSafeguard(
dns_timeout=5.0,
dns_retries=3,
retry_delay=1.0
)
Data Files
The library uses three customizable data files:
popular_domains.txt
: Common email domainspopular_tlds.txt
: Valid top-level domainsdisposable_domains.txt
: Known disposable email providers
Custom Data Files
validator = EmailSafeguard(data_dir="path/to/data/directory")
Development
Running Tests
python -m pytest
python -m pytest --cov=email_safeguard
Type Checking
mypy email_safeguard
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Chukwuka Ibejih (chukaibejih@gmail.com)
Acknowledgements
Built with:
If you find this library helpful, please give it a ⭐!