Mailfix Logo

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.

Live demo · GitHub · Issues

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, and addDomains.
  • 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:

Open the live demo

Use examples such as:

  • user@gmial.com
  • user@hotmial.com
  • user@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.jaroWinkler
  • MailfixSimilarityAlgorithm.levenshtein
  • MailfixSimilarityAlgorithm.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:

Libraries

mailfix