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.
- 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.
dependencies:
mailfix: ^0.37.2Then run:
dart pub getFor Flutter projects, use:
flutter pub getTry 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.
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.
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); // nullMailfix separates email format validation from domain correction. An email can be valid and still receive a suggestion when the domain looks like a typo.
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 |
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.comYou can also add domains after creating the instance:
final mailfix = Mailfix();
mailfix.addDomain('company.com');
mailfix.addDomains(['team.dev', 'example.org']);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.
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); // trueUse 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 | 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. |
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.
Issues and pull requests are welcome. Before opening a pull request, run:
