49 HTML email template global skill

Use when responsive HTML email has to render correctly in every client — table-based structure, inline CSS, 600px max width, dark mode handling, quirks for Gmail, Apple Mail, Outlook and Yahoo, bulletproof buttons, and a pre-send test checklist, shipping a self-contained .html file to paste into Klaviyo, Mailchimp, HubSpot, or Brevo.

by minhnv0807·MIT license·★ 599 Stars on the repo·GitHub ↗

Use now

Files of 49 HTML email template global

minhnv0807/master1 file shown
SKILL.md
Show the full text169 lines

HTML Email Template (Global)

Email HTML is not web HTML: it needs table layout, inline CSS, and avoidance of everything clients do not support. The bar is simple — it looks right in Gmail, Apple Mail, Outlook, and Yahoo, and it reads on a 375px phone. No exceptions. Content and sequence come from 14-email-marketing-global; this skill handles the code.

Information gathering

Read the brand guideline (46-brand-guideline-global) and the email content from 14-email-marketing-global if available. If information is missing, ask up to 4 questions:

  1. Email type and layout? Welcome, broadcast, nurture, offer, or transactional — single column, two columns with a product image, or a multi-section newsletter?
  2. Which sections? Header, hero, body, social proof, CTA, footer — is there a hero image?
  3. Is the copy written? Or should the template ship with placeholders? Where does the primary CTA link?
  4. Which ESP sends it? Klaviyo, Mailchimp, HubSpot, Brevo, Braze, or other — merge tag syntax differs per platform.

Principles

  1. Table layout only — no div/flexbox/grid/float/position:absolute. Outlook on Windows renders through the Word engine and does not support them.
  2. Inline all CSS. Gmail can strip <style> blocks; keep only media queries and dark-mode rules in <style>, and inline everything else.
  3. 600px maximum width, degrading to 375px.
  4. System-font fallbacks: '[body font]', Arial, Helvetica, sans-serif. Never depend on a web font — many clients will not load it.
  5. Every img needs alt text plus width and height attributes so a blocked-image inbox still reads correctly.
  6. Unsubscribe link and a physical postal address are legally required (CAN-SPAM in the US, GDPR and PECR in the EU/UK, CASL in Canada). Honor opt-outs promptly.
  7. Test on mobile first. The majority of opens are on a phone.
  8. One self-contained .html file, under 100KB — Gmail clips messages past roughly 102KB.

Workflow

1. Choose the layout
Layout Use for
Single column Broadcast, nurture — most readable, fewest rendering bugs
Two column (image + text) Offer emails with a product image
Multi-section newsletter Digest, updates — one table block per section
2. Build to the technical spec
Container: 600px desktop / 100% mobile
Outer background: light neutral (e.g. #F4F4F4)
Body background: [background color] (usually white)
Font: '[body font]', Arial, Helvetica, sans-serif
Body font-size: 16px / line-height: 1.6
Mobile breakpoint: max-width 480px

Design tokens come from the brand guideline:

  • Header: ground [primary color], reversed logo, padding 20px.
  • Hero: ground [primary color] or a gradient from [primary color] to [secondary color]; headline bold 28px in a light fill; subtext 16px; CTA button.
  • Body: light ground, padding 40x48px desktop / 24x20px mobile; H2 bold 22px in [strong text color]; body 16px, line-height 1.7.
  • CTA button: ground [primary color], bold 16px light text, padding 14x32px, radius 8px, display:inline-block, no underline. Outlook Windows will not draw border-radius — accept the square fallback, and never use an image as the button.
  • Social proof: quote on [light background color], 4px left border in [primary color], attributed name and role.
  • Footer: light neutral ground, 13px [muted text color] — small logo around 80px, website and social links, postal address, unsubscribe, copyright.
3. Fill the sections
  • Header: logo, centered.
  • Hero: optional preheader text, headline (max 60 characters), subtext (max 100 characters), CTA button, optional hero image 600x300 with alt text.
  • Body: greeting with a merge tag, 2-3 opening sentences, main content in short paragraphs (max four sentences), bulleted content built as table rows rather than ul for safer rendering, optional secondary CTA.
  • Footer (mandatory): company postal address, unsubscribe line ("You are receiving this because you signed up at [website] | Unsubscribe"), copyright.
4. Handle mobile and dark mode
@media only screen and (max-width: 480px) {
  /* container: 100% width */
  /* body font: 15px */
  /* CTA: full width, centered */
  /* padding: 24px 20px */
  /* images: 100% width */
}

Dark mode:

  • Add <meta name="color-scheme" content="light dark"> and <meta name="supported-color-schemes" content="light dark">.
  • @media (prefers-color-scheme: dark) is only partially supported: Apple Mail honors it well; Gmail typically applies its own color inversion and ignores the media query; Outlook may force a full invert.
  • Safe rules when dark mode cannot be controlled: use a transparent-background PNG logo that reads on both light and dark grounds (or add a light stroke); never use pure black text on a transparent ground; give important blocks such as the CTA a solid background color; test in at least one dark-mode client before sending.
5. Fill the required placeholders
  • First-name merge tag — syntax depends on the ESP
  • Unsubscribe link — legally required
  • Company postal address — must be real
  • Primary CTA link — real URL with UTM parameters per 14-email-marketing-global
ESP First-name merge tag Unsubscribe
Klaviyo {{ first_name|default:"there" }} {% unsubscribe %}
Mailchimp *|FNAME|* *|UNSUB|*
HubSpot {{ contact.firstname }} injected automatically
Brevo {{ contact.FIRSTNAME }} {{ unsubscribe }}

Always confirm the exact syntax in the sending platform before the final send — an unrendered merge tag in a live send is a visible error.

Email client matrix

Client Rendering behavior What to do about it
Gmail (web and app) May strip <style> in some contexts; applies its own dark-mode inversion Inline everything; the single-column layout must read even if media queries are dropped
Apple Mail (macOS/iOS) WebKit — the most capable renderer Supports media queries and prefers-color-scheme properly; use it as the dark-mode reference
Outlook desktop (Windows) Word rendering engine Tables only; no border-radius, unreliable background images (use solid colors); test separately
Outlook.com / new Outlook Chromium-based, much better than desktop Still avoid flex and grid for consistency with desktop
Outlook mobile (iOS/Android) Reasonable modern rendering Verify CTA tap targets at 44px minimum height
Yahoo Mail / AOL Decent support, varies by build Send a real test to a live account
Mobile in general 375px screens Body font 15px or larger, CTA at least 44px tall for thumbs

Measurement note

Apple Mail Privacy Protection pre-fetches tracking pixels, which inflates reported open rates for any list with a meaningful Apple Mail share — and Gmail image proxying adds noise of its own. Treat open rate as a directional signal only. Judge template and campaign performance on click-through rate, click-to-open rate, and conversions. Global email medians for context: open 22-27%, CTR 2.5-3.5%, CTOR 10-14%, unsubscribe below 0.5%.

Pre-send test checklist

  • Gmail desktop and Gmail mobile app
  • Apple Mail on iPhone
  • Outlook desktop on Windows (if the list skews corporate)
  • Yahoo or another webmail account
  • Dark-mode preview in at least one client
  • Every link works — especially the CTA and the unsubscribe
  • Alt text on every image; the email still makes sense with images blocked
  • HTML file under 100KB (avoids Gmail clipping)
  • Merge tags use the sending platform's syntax and render correctly
  • Real seed send to 2-3 different inboxes before the list send
  • Subject line and preheader filled in (from 14-email-marketing-global)
  • Postal address and unsubscribe present and accurate
  • 14-email-marketing-global: strategy, sequence, content, and subject lines — written before the code.
  • 46-brand-guideline-global: colors, fonts, and logo for the email design tokens.
  • 47-design-review-global: review the email before sending (brand, readability, CTA, platform fit).
  • 12-landing-page-brief-global: the CTA usually lands on a landing page — keep the message consistent across both.

Quality checklist

  • Table layout, no flexbox, grid, float, or absolute positioning
  • All CSS inline except media queries and dark-mode rules
  • 600px width, degrading to 375px without breaking
  • System font fallbacks, no dependency on web fonts
  • CTA button is solid, at least 44px tall on mobile, not an image
  • Footer carries postal address, unsubscribe, and copyright
  • Dark-mode meta tags added and the safe rules applied
  • Full test checklist executed before sending
  • One self-contained .html file, under 100KB
1---
2name: 49-html-email-template-global
3description: "Use when responsive HTML email has to render correctly in every client — table-based structure, inline CSS, 600px max width, dark mode handling, quirks for Gmail, Apple Mail, Outlook and Yahoo, bulletproof buttons, and a pre-send test checklist, shipping a self-contained .html file to paste into Klaviyo, Mailchimp, HubSpot, or Brevo. Trigger on 'HTML email', 'code an email template', 'responsive email', 'why does my email break in Outlook', 'email dark mode is broken', 'the newsletter looks wrong on mobile'. Not for — sequence strategy and subject lines, see `14-email-marketing-global`; a web page, see `12-landing-page-brief-global`; brand colors and fonts, see `46-brand-guideline-global`."
4metadata:
5 version: 1.0.1
6 category: operations
7license: MIT
8triggers:
9 - "HTML email"
10 - "code an email"
11 - "email template"
12 - "responsive email"
13 - "email broadcast HTML"
14 - "why does my email break in Outlook"
15 - "email dark mode"
16output: "A single self-contained .html file — paste it into the ESP (Klaviyo, Mailchimp, HubSpot, Brevo) and send. Ships with a client test checklist."
17related:
18 - product-marketing-context-global
19 - 14-email-marketing-global
20 - 46-brand-guideline-global
21 - 47-design-review-global
22 - 12-landing-page-brief-global
23---
24 
25# HTML Email Template (Global)
26 
27Email HTML is not web HTML: it needs table layout, inline CSS, and avoidance of everything clients do not support. The bar is simple — it looks right in Gmail, Apple Mail, Outlook, and Yahoo, and it reads on a 375px phone. No exceptions. Content and sequence come from `14-email-marketing-global`; this skill handles the code.
28 
29## Information gathering
30 
31Read the brand guideline (`46-brand-guideline-global`) and the email content from `14-email-marketing-global` if available. If information is missing, ask up to 4 questions:
32 
331. **Email type and layout?** Welcome, broadcast, nurture, offer, or transactional — single column, two columns with a product image, or a multi-section newsletter?
342. **Which sections?** Header, hero, body, social proof, CTA, footer — is there a hero image?
353. **Is the copy written?** Or should the template ship with placeholders? Where does the primary CTA link?
364. **Which ESP sends it?** Klaviyo, Mailchimp, HubSpot, Brevo, Braze, or other — merge tag syntax differs per platform.
37 
38## Principles
39 
401. **Table layout only — no div/flexbox/grid/float/position:absolute.** Outlook on Windows renders through the Word engine and does not support them.
412. **Inline all CSS.** Gmail can strip `<style>` blocks; keep only media queries and dark-mode rules in `<style>`, and inline everything else.
423. **600px maximum width**, degrading to 375px.
434. **System-font fallbacks:** '[body font]', Arial, Helvetica, sans-serif. Never depend on a web font — many clients will not load it.
445. **Every `img` needs alt text plus width and height attributes** so a blocked-image inbox still reads correctly.
456. **Unsubscribe link and a physical postal address are legally required** (CAN-SPAM in the US, GDPR and PECR in the EU/UK, CASL in Canada). Honor opt-outs promptly.
467. **Test on mobile first.** The majority of opens are on a phone.
478. **One self-contained .html file, under 100KB** — Gmail clips messages past roughly 102KB.
48 
49## Workflow
50 
51### 1. Choose the layout
52 
53| Layout | Use for |
54|--------|---------|
55| Single column | Broadcast, nurture — most readable, fewest rendering bugs |
56| Two column (image + text) | Offer emails with a product image |
57| Multi-section newsletter | Digest, updates — one table block per section |
58 
59### 2. Build to the technical spec
60 
61```
62Container: 600px desktop / 100% mobile
63Outer background: light neutral (e.g. #F4F4F4)
64Body background: [background color] (usually white)
65Font: '[body font]', Arial, Helvetica, sans-serif
66Body font-size: 16px / line-height: 1.6
67Mobile breakpoint: max-width 480px
68```
69 
70Design tokens come from the brand guideline:
71 
72- Header: ground [primary color], reversed logo, padding 20px.
73- Hero: ground [primary color] or a gradient from [primary color] to [secondary color]; headline bold 28px in a light fill; subtext 16px; CTA button.
74- Body: light ground, padding 40x48px desktop / 24x20px mobile; H2 bold 22px in [strong text color]; body 16px, line-height 1.7.
75- CTA button: ground [primary color], bold 16px light text, padding 14x32px, radius 8px, `display:inline-block`, no underline. Outlook Windows will not draw `border-radius` — accept the square fallback, and never use an image as the button.
76- Social proof: quote on [light background color], 4px left border in [primary color], attributed name and role.
77- Footer: light neutral ground, 13px [muted text color] — small logo around 80px, website and social links, postal address, unsubscribe, copyright.
78 
79### 3. Fill the sections
80 
81- Header: logo, centered.
82- Hero: optional preheader text, headline (max 60 characters), subtext (max 100 characters), CTA button, optional hero image 600x300 with alt text.
83- Body: greeting with a merge tag, 2-3 opening sentences, main content in short paragraphs (max four sentences), bulleted content built as table rows rather than `ul` for safer rendering, optional secondary CTA.
84- Footer (mandatory): company postal address, unsubscribe line ("You are receiving this because you signed up at [website] | Unsubscribe"), copyright.
85 
86### 4. Handle mobile and dark mode
87 
88```css
89@media only screen and (max-width: 480px) {
90 /* container: 100% width */
91 /* body font: 15px */
92 /* CTA: full width, centered */
93 /* padding: 24px 20px */
94 /* images: 100% width */
95}
96```
97 
98Dark mode:
99 
100- Add `<meta name="color-scheme" content="light dark">` and `<meta name="supported-color-schemes" content="light dark">`.
101- `@media (prefers-color-scheme: dark)` is only partially supported: Apple Mail honors it well; Gmail typically applies its own color inversion and ignores the media query; Outlook may force a full invert.
102- Safe rules when dark mode cannot be controlled: use a transparent-background PNG logo that reads on both light and dark grounds (or add a light stroke); never use pure black text on a transparent ground; give important blocks such as the CTA a solid background color; test in at least one dark-mode client before sending.
103 
104### 5. Fill the required placeholders
105 
106- First-name merge tag — syntax depends on the ESP
107- Unsubscribe link — legally required
108- Company postal address — must be real
109- Primary CTA link — real URL with UTM parameters per `14-email-marketing-global`
110 
111| ESP | First-name merge tag | Unsubscribe |
112|-----|----------------------|-------------|
113| Klaviyo | `{{ first_name\|default:"there" }}` | `{% unsubscribe %}` |
114| Mailchimp | `*\|FNAME\|*` | `*\|UNSUB\|*` |
115| HubSpot | `{{ contact.firstname }}` | injected automatically |
116| Brevo | `{{ contact.FIRSTNAME }}` | `{{ unsubscribe }}` |
117 
118Always confirm the exact syntax in the sending platform before the final send — an unrendered merge tag in a live send is a visible error.
119 
120## Email client matrix
121 
122| Client | Rendering behavior | What to do about it |
123|--------|--------------------|---------------------|
124| Gmail (web and app) | May strip `<style>` in some contexts; applies its own dark-mode inversion | Inline everything; the single-column layout must read even if media queries are dropped |
125| Apple Mail (macOS/iOS) | WebKit — the most capable renderer | Supports media queries and `prefers-color-scheme` properly; use it as the dark-mode reference |
126| Outlook desktop (Windows) | Word rendering engine | Tables only; no `border-radius`, unreliable background images (use solid colors); test separately |
127| Outlook.com / new Outlook | Chromium-based, much better than desktop | Still avoid flex and grid for consistency with desktop |
128| Outlook mobile (iOS/Android) | Reasonable modern rendering | Verify CTA tap targets at 44px minimum height |
129| Yahoo Mail / AOL | Decent support, varies by build | Send a real test to a live account |
130| Mobile in general | 375px screens | Body font 15px or larger, CTA at least 44px tall for thumbs |
131 
132## Measurement note
133 
134Apple Mail Privacy Protection pre-fetches tracking pixels, which inflates reported open rates for any list with a meaningful Apple Mail share — and Gmail image proxying adds noise of its own. Treat open rate as a directional signal only. Judge template and campaign performance on click-through rate, click-to-open rate, and conversions. Global email medians for context: open 22-27%, CTR 2.5-3.5%, CTOR 10-14%, unsubscribe below 0.5%.
135 
136## Pre-send test checklist
137 
138- [ ] Gmail desktop and Gmail mobile app
139- [ ] Apple Mail on iPhone
140- [ ] Outlook desktop on Windows (if the list skews corporate)
141- [ ] Yahoo or another webmail account
142- [ ] Dark-mode preview in at least one client
143- [ ] Every link works — especially the CTA and the unsubscribe
144- [ ] Alt text on every image; the email still makes sense with images blocked
145- [ ] HTML file under 100KB (avoids Gmail clipping)
146- [ ] Merge tags use the sending platform's syntax and render correctly
147- [ ] Real seed send to 2-3 different inboxes before the list send
148- [ ] Subject line and preheader filled in (from `14-email-marketing-global`)
149- [ ] Postal address and unsubscribe present and accurate
150 
151## Related skills
152 
153- `14-email-marketing-global`: strategy, sequence, content, and subject lines — written before the code.
154- `46-brand-guideline-global`: colors, fonts, and logo for the email design tokens.
155- `47-design-review-global`: review the email before sending (brand, readability, CTA, platform fit).
156- `12-landing-page-brief-global`: the CTA usually lands on a landing page — keep the message consistent across both.
157 
158## Quality checklist
159 
160- [ ] Table layout, no flexbox, grid, float, or absolute positioning
161- [ ] All CSS inline except media queries and dark-mode rules
162- [ ] 600px width, degrading to 375px without breaking
163- [ ] System font fallbacks, no dependency on web fonts
164- [ ] CTA button is solid, at least 44px tall on mobile, not an image
165- [ ] Footer carries postal address, unsubscribe, and copyright
166- [ ] Dark-mode meta tags added and the safe rules applied
167- [ ] Full test checklist executed before sending
168- [ ] One self-contained .html file, under 100KB
169 

Discussion

Alternatives

Animation vocabularyReverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and wants the right word to prompt an AI or designer with. For naming an effect, not designing or building one.Design & UI · MITPlaywright BrowserHeadless, reproducible browser automation with Playwright for any project — screenshots of web pages or local dev servers (desktop/tablet/mobile, full page or one element, single page or every page/menu of an app in one batch), frontend audits (console errors, failed requests, broken images/links, responsive overflow, axe accessibility, LCP/CLS performance), before/after visual comparison, scripted E2E flows (log in, click, fill, page through, assert), and logged-in pages via saved sessions. Use this whenever the user wants to screenshot or visually check a site, find frontend bugs, see how a page looks on mobile, compare the UI before and after a CSS/code change, reproduce a bug from an issue or ticket and capture evidence images for it, verify a UI flow works, or run/write a browser test — even if they never say "Playwright" or "browser". If Claude in Chrome could also do the job, briefly ask which to use (with a recommendation) instead of silently picking.Coding · MITAct as an electron frontend developerGuide users in building a desktop application using Electron with a focus on frontend development best practices.Coding · CC0-1.0AI builderThis AI builder will create a fully functional website based on the provided details the website will be ready to publish or deployInfrastructure & ops · CC0-1.0