mailfix 0.37.2
mailfix: ^0.37.2 copied to clipboard
Package for email validation with domain correction suggestions using configurable similarity algorithms.
Mailfix #
Mailfix is a Dart and Flutter package for email validation, domain typo
correction, and email suggestion workflows. It validates email format and can
suggest corrected addresses for common domain mistakes such as user@gmial.com
or user@hotmial.com.
Use it in signup forms, profile screens, checkout flows, admin tools, and any Dart or Flutter app that needs a better email input experience.
Features #
- Email validation powered by
email_validator. - Domain typo suggestions for common providers such as Gmail, Outlook, Hotmail, Yahoo, iCloud, AOL, and Live.
- Custom business or product domains through
extraDomains,addDomain, andaddDomains. - Configurable similarity algorithms: Jaro-Winkler, Levenshtein, and Damerau-Levenshtein.
- Configurable distance threshold for stricter or more permissive suggestions.
- Custom email validators and similarity algorithms through small interfaces.
- Works in Dart and Flutter projects.
Installation #
dependencies:
mailfix: ^0.37.2
Then run:
dart pub get
For Flutter projects, use:
flutter pub get
Live Demo #
Try Mailfix in your browser without installing anything:
Use examples such as:
user@gmial.comuser@hotmial.comuser@company.con
The demo shows email validation results and domain typo suggestions in real time.
Quick Start #
import 'package:mailfix/mailfix.dart';
void main() {
final mailfix = Mailfix();
final result = mailfix.validateEmail('user@gmial.com');
print(result.isValid); // true
print(result.suggestion); // user@gmail.com
}
validateEmail returns an EmailValidationResult with:
isValid: whether the email format is valid.suggestion: a corrected email address when a close domain match is found.error: optional error text for custom result flows.
Email Validation #
final mailfix = Mailfix();
final valid = mailfix.validateEmail('user@gmail.com');
print(valid.isValid); // true
print(valid.suggestion); // null
final invalid = mailfix.validateEmail('not-an-email');
print(invalid.isValid); // false
print(invalid.suggestion); // null
Mailfix separates email format validation from domain correction. An email can be valid and still receive a suggestion when the domain looks like a typo.
Domain Typo Suggestions #
final mailfix = Mailfix();
final result = mailfix.validateEmail('customer@hotmial.com');
if (result.suggestion != null) {
print('Did you mean ${result.suggestion}?');
}
Common examples:
| Input | Suggestion |
|---|---|
user@gmial.com |
user@gmail.com |
user@hotmial.com |
user@hotmail.com |
user@outlok.com |
user@outlook.com |
Custom Domains #
Use custom domains when your app accepts company, product, or organization addresses.
final mailfix = Mailfix(
extraDomains: ['company.com', 'product.dev'],
);
final result = mailfix.validateEmail('user@company.con');
print(result.suggestion); // user@company.com
You can also add domains after creating the instance:
final mailfix = Mailfix();
mailfix.addDomain('company.com');
mailfix.addDomains(['team.dev', 'example.org']);
Similarity Algorithms #
Jaro-Winkler is the default algorithm because it works well for short strings and common domain typos.
final mailfix = Mailfix(
algorithm: MailfixSimilarityAlgorithm.damerauLevenshtein,
maxAllowedDistance: 3,
);
final result = mailfix.validateEmail('user@gmial.com');
print(result.suggestion);
Available algorithms:
MailfixSimilarityAlgorithm.jaroWinklerMailfixSimilarityAlgorithm.levenshteinMailfixSimilarityAlgorithm.damerauLevenshtein
For advanced use cases, pass your own SimilarityAlgorithm implementation with
the similarityAlgorithm parameter.
Special Characters #
By default, Mailfix restricts selected special characters in the local part of
the email address. Enable allowSpecialChars when your app accepts aliases or
RFC-style local parts such as user+tag@gmail.com.
final mailfix = Mailfix(allowSpecialChars: true);
final result = mailfix.validateEmail('user+tag@gmail.com');
print(result.isValid); // true
Custom Email Validator #
Use EmailValidator when your app has business-specific rules.
class BusinessEmailValidator implements EmailValidator {
final _defaultValidator = DefaultEmailValidator();
@override
String get name => 'business-email';
@override
bool isValid(String email) {
if (!_defaultValidator.isValid(email)) return false;
return !email.toLowerCase().endsWith('@disposable.test');
}
}
final mailfix = Mailfix(
validator: BusinessEmailValidator(),
);
EmailValidatorInterface is still available as a deprecated compatibility
alias. Prefer EmailValidator in new code.
API Overview #
| API | Purpose |
|---|---|
Mailfix |
Main service for validation and suggestions. |
EmailValidationResult |
Result object with isValid, suggestion, and error. |
EmailValidator |
Interface for custom email validation rules. |
SimilarityAlgorithm |
Interface for custom distance/similarity logic. |
EmailDomains |
Domain collection used by the suggestion engine. |
Main Mailfix options:
| Option | Description |
|---|---|
algorithm |
Selects one of the built-in similarity algorithms. |
similarityAlgorithm |
Uses a custom algorithm implementation. |
maxAllowedDistance |
Controls how close a domain must be to receive a suggestion. |
extraDomains |
Adds custom valid domains during initialization. |
allowSpecialChars |
Allows special characters in the email local part. |
validator |
Replaces the default email validator. |
When to Use Mailfix #
Mailfix is useful when you want to reduce failed signups, support requests, and email delivery mistakes caused by mistyped domains. It is not an email deliverability checker and does not verify whether an inbox exists.
Contributing #
Issues and pull requests are welcome. Before opening a pull request, run:
