How to Test HTML Emails Before Sending (2026 Guide)
Every email client renders HTML differently. Here's how to catch issues before your subscribers do.
You spent hours designing the perfect email campaign. You hit send. Then the support tickets roll in: "Your email looks broken in Outlook." Sound familiar?
HTML email rendering is notoriously inconsistent. Gmail strips <style> tags, Outlook uses Word's rendering engine (yes, really), and Apple Mail handles things completely differently from Android. Testing across all these clients manually is a nightmare.
Why Email Testing Matters
According to industry data, emails with rendering issues see 20-30% lower click-through rates. If your CTA button doesn't render or your layout breaks on mobile, that's revenue you're leaving on the table.
Common issues that slip through without testing:
- CSS not inlined - Gmail and many clients ignore
<style>blocks entirely - Broken responsive layouts - Media queries aren't supported everywhere
- Missing alt text - Images blocked by default in many corporate clients
- Dark mode conflicts - Your white text disappears on dark backgrounds
- Oversized images - Slow loading, especially on mobile data
Option 1: Manual Testing (Slow but Free)
The brute force approach: send test emails to accounts on every major client and check them one by one.
You'll need accounts on Gmail, Outlook.com, Yahoo Mail, and access to Apple Mail and the iOS/Android mail apps. For each campaign change, repeat the whole process. This works for occasional emails but doesn't scale.
Option 2: API-Based Testing with MailForge
MailForge takes a different approach: send your HTML, get back a rendered preview and validation report via API. No manual checking, no sending test emails.
curl -X POST "https://mailforge.grabshot.dev/v1/render" \
-H "Content-Type: application/json" \
-d '{
"html": "<h1>Welcome!</h1><p style=\"color: blue;\">Your order is confirmed.</p>",
"apiKey": "YOUR_API_KEY"
}'
The response includes:
- Rendered screenshot - See exactly how it looks
- Inlined CSS version - Ready to send, compatible with Gmail
- Validation warnings - Missing alt text, unsupported CSS properties, accessibility issues
Integrate Into Your CI/CD Pipeline
The real power is automation. Add MailForge to your deployment pipeline and every email template gets validated before it ships:
// Node.js example
const response = await fetch('https://mailforge.grabshot.dev/v1/validate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
html: emailTemplate,
apiKey: process.env.MAILFORGE_KEY
})
});
const result = await response.json();
if (result.warnings.length > 0) {
console.warn('Email issues found:', result.warnings);
// Fail the build or notify the team
}
Option 3: Build Your Own (DIY)
If you want full control, you can build email testing with Puppeteer:
const puppeteer = require('puppeteer');
async function renderEmail(html) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 600, height: 800 }); // Email width
await page.setContent(html, { waitUntil: 'networkidle0' });
const screenshot = await page.screenshot({ type: 'png' });
await browser.close();
return screenshot;
}
This gives you rendering but not validation. You'll need to add your own CSS inlining (try juice or inline-css npm packages), HTML validation, and image optimization. MailForge bundles all of this into one call.
CSS Inlining: The Most Common Email Issue
This is the number one reason emails break: external and <style> block CSS doesn't work in most email clients. Every style must be inline.
Before (breaks in Gmail):
<style>
.btn { background: blue; color: white; padding: 12px 24px; }
</style>
<a class="btn" href="#">Click me</a>
After (works everywhere):
<a href="#" style="background: blue; color: white; padding: 12px 24px; display: inline-block;">Click me</a>
MailForge's /v1/inline endpoint does this transformation automatically, handling edge cases like pseudo-selectors and media queries that need to stay in a <style> block.
Email Testing Checklist
Before every campaign send:
- ✅ All CSS is inlined (or use MailForge to inline it)
- ✅ Images have alt text and are under 100KB each
- ✅ Total email size is under 102KB (Gmail clips larger emails)
- ✅ Links all work and include UTM parameters
- ✅ Preheader text is set (not just the first line of body copy)
- ✅ Dark mode tested (add
color-scheme: light dark) - ✅ Mobile preview looks correct at 320px-480px width
- ✅ Unsubscribe link is present and working
Getting Started
MailForge offers 50 free email tests per month, no credit card required. Sign up and get your API key in 30 seconds.
For teams sending regular campaigns, the Starter plan ($9/month) covers 2,000 tests -- enough for most teams with active email programs.
Part of the GrabShot Developer Tools Suite
MailForge is one of several developer APIs we offer. Check out the full suite:
📧 Developer API Tips
Get practical API tutorials and tools. No spam, unsubscribe anytime.