A surprising amount of email loss is caused by the same fifty domain typos. gmial.com, hotmial.com, yhaoo.com. Every recruiter, ecommerce store, and SaaS signup form sees these constantly. The good news: they are easy to detect and easy to correct.
The top 20 typo domains
| Typo | Real domain |
|---|---|
| gmial.com | gmail.com |
| gnail.com | gmail.com |
| gmali.com | gmail.com |
| gmaill.com | gmail.com |
| gmail.co | gmail.com |
| gmail.con | gmail.com |
| gmail.cm | gmail.com |
| gmail.ocm | gmail.com |
| hotmial.com | hotmail.com |
| hotmal.com | hotmail.com |
| hotmaill.com | hotmail.com |
| hotmail.co | hotmail.com |
| yhaoo.com | yahoo.com |
| yaho.com | yahoo.com |
| yahooo.com | yahoo.com |
| yahoo.con | yahoo.com |
| outlok.com | outlook.com |
| outloo.com | outlook.com |
| icloud.co | icloud.com |
| iclould.com | icloud.com |
The auto-correction pattern
Use a small client-side library that suggests corrections inline. The most popular is mailcheck (4KB, MIT license):
<script src="https://cdn.jsdelivr.net/npm/mailcheck/src/mailcheck.min.js"></script>
<script>
const emailInput = document.querySelector('input[name=email]');
const suggestionEl = document.querySelector('.email-suggestion');
emailInput.addEventListener('blur', () => {
Mailcheck.run({
email: emailInput.value,
suggested: function(suggestion) {
suggestionEl.innerHTML =
`Did you mean <strong>${suggestion.full}</strong>? ` +
`<button onclick="document.querySelector('input[name=email]').value='${suggestion.full}'; this.parentNode.innerHTML='';">Use this</button>`;
},
empty: function() {
suggestionEl.innerHTML = '';
}
});
});
</script>
That catches the top 80% of typos without any API call.
What mailcheck does not catch
- Typos in the local part (
jhon@gmail.comwhen you meantjohn@gmail.com). No tool can guess this; only verification + name-plausibility helps. - Typo domains it does not know about (rare custom corporate misspellings).
- Addresses that are syntactically perfect but belong to nobody (verification catches these).
Combine with verification
Mailcheck for typos. MailoClean verify for everything else. The combined system catches:
- Common typo domains, with auto-correction suggestion.
- Disposable signups.
- Role-based addresses.
- Catch-all domains.
- Non-existent mailboxes.
FAQ
Is mailcheck still maintained?
The library is stable but not actively developed. The default domain list is fine for most use cases. You can extend it with your own custom domains if needed.
Should I auto-replace the typo or suggest a correction?
Suggest, do not auto-replace. Users get confused when their input changes on its own. Show "Did you mean X? Use this." and let them confirm.
Can the API tell me if an address is a typo?
The API tells you the domain is invalid (which catches typo domains). It does not specifically say "this looks like a typo of gmail.com". Use mailcheck client-side for that.
Catch typos AND verify
Use mailcheck on the frontend, MailoClean verify on the backend. Five-line integrations on both sides.