A high email bounce rate destroys deliverability. Once your bounce rate exceeds 2%, email providers start routing your messages to spam. Above 5%, you risk getting your sending domain blacklisted entirely.
The fix is simple: validate email addresses before they enter your system.
The numbers
- 60% of form submissions use fake or mistyped emails
- 2% bounce rate threshold before spam filtering kicks in
- ~5ms to validate an email via API (faster than a page load)
Why emails bounce
Hard bounces (permanent)
- Invalid domain: The domain doesn't exist or has no mail servers (no MX records)
- Invalid mailbox: The domain exists but the specific address doesn't
- Typos: user@gmial.com, user@hotnail.com — real people with wrong addresses
Soft bounces (temporary)
- Full mailbox: The recipient's inbox is full
- Server down: The receiving mail server is temporarily unavailable
- Message too large: The email exceeds the recipient's size limit
Hard bounces are the ones that hurt your sender reputation. They're also the ones you can prevent with validation.
What email validation catches
- Syntax errors: Malformed addresses that aren't valid email format
- Non-existent domains: Domains with no DNS records or no MX records
- Disposable addresses: Throwaway emails from services like Mailinator that expire in minutes
- Typos: Common misspellings of popular domains (gmial.com, yaho.com, outlok.com)
- Role accounts: Generic addresses like info@, admin@, noreply@ that often don't accept mail
Where to validate: signup vs. send time
At signup (recommended)
Validate the email the moment a user enters it. If it's invalid, show an error immediately. If it's a typo, suggest the correction.
- The user is still on the page and can fix their email
- You never store a bad address in the first place
- Response time is fast enough for real-time UX (~5ms)
Before sending a campaign
If you have an existing list, validate it in bulk before sending. Run every address through validation and remove hard bounces before they damage your sender score.
Implementation: real-time validation at signup
Frontend (show feedback as they type)
const emailInput = document.getElementById("email");
const feedback = document.getElementById("email-feedback");
let timeout;
emailInput.addEventListener("input", () => {
clearTimeout(timeout);
const email = emailInput.value.trim();
if (!email || !email.includes("@")) return;
// Debounce: wait 500ms after user stops typing
timeout = setTimeout(async () => {
const res = await fetch(
`https://mxcheck.dev/api/validate?email=${encodeURIComponent(email)}`
);
const data = await res.json();
if (data.suggestion) {
feedback.textContent = `Did you mean ${data.suggestion}?`;
feedback.style.color = "#eab308";
} else if (!data.valid) {
feedback.textContent = data.reason || "Invalid email";
feedback.style.color = "#ef4444";
} else if (data.checks.disposable) {
feedback.textContent = "Please use a permanent email address";
feedback.style.color = "#ef4444";
} else {
feedback.textContent = "Email looks good";
feedback.style.color = "#22c55e";
}
}, 500);
});
Backend (verify before saving)
import mxcheck from "mxcheck";
app.post("/signup", async (req, res) => {
const result = await mxcheck(req.body.email);
if (!result.valid) {
return res.status(400).json({
error: "Invalid email",
reason: result.reason,
suggestion: result.suggestion
});
}
if (result.checks.disposable) {
return res.status(400).json({
error: "Disposable emails are not allowed"
});
}
// Email is validated, proceed with account creation
});
The ROI of email validation
Say you have a SaaS with 1,000 signups per month:
- Without validation: ~15% of emails are invalid. That's 150 bad addresses per month.
- You send a welcome email, a follow-up, and a weekly digest. That's 600+ bounces per month from new signups alone.
- Your bounce rate climbs past 2%. Gmail starts flagging your emails as spam. Open rates drop for ALL users.
- Cost of an email validation API: $0-29/month depending on volume.
- Cost of a damaged sender reputation: months of remediation, potential domain blacklisting, and lost revenue.
Email validation isn't a cost center. It's insurance for your entire email channel.
Best practices
- Validate at the point of entry. Don't wait until send time. Catch bad emails when the user can still fix them.
- Show typo suggestions. "Did you mean user@gmail.com?" converts a lost user into a saved one.
- Block disposable emails for paid features. Free tier with disposable is fine. Paid features should require a real address.
- Don't over-block. A valid email that scores low might still be worth accepting. Use the score, not just the boolean.
- Re-validate periodically. Domains expire. Mail servers change. Re-validate your list quarterly.
Summary
Email bounces are preventable. Validate addresses at signup with a syntax check, MX record lookup, and disposable detection. It takes one API call, adds ~5ms of latency, and protects your sender reputation from day one.
MXCheck - Free email validation API. 3,000 requests/month free. npm install mxcheck
Top comments (0)