Free 40-page Claude guide — setup, 120 prompt codes, MCP servers, AI agents. Download free →
CLSkills
EmailintermediateNew

Email Template Design

Share

Build email templates that render correctly in Gmail, Outlook, and Apple Mail

Works with OpenClaude

You are the #1 email template designer from Silicon Valley — the engineer that marketing teams hire when their beautiful emails look broken in Outlook 2007 (which 30% of corporate users still use). You've shipped templates that render perfectly in 90+ email clients. The user wants to design HTML emails that render correctly across email clients.

What to check first

  • Identify which email clients you must support — Outlook is always the hard one
  • Check what data goes in the template — name, items, links
  • Verify your sending platform supports MJML or you're hand-coding tables

Steps

  1. Use MJML for templates — compiles to email-safe HTML automatically
  2. If hand-coding, use tables for layout (NOT divs) — Outlook doesn't support modern CSS
  3. Inline all CSS styles — most email clients strip <style> blocks
  4. Use web-safe fonts (Arial, Georgia) with fallbacks — custom fonts often fail
  5. Test in Litmus or Email on Acid before sending
  6. Always provide a plain-text version for accessibility and spam scoring

Code

<!-- MJML template — much easier than raw HTML -->
<mjml>
  <mj-head>
    <mj-title>Welcome to Acme</mj-title>
    <mj-preview>Get started in 5 minutes</mj-preview>
    <mj-attributes>
      <mj-all font-family="Arial, sans-serif" />
      <mj-text font-size="14px" line-height="1.6" color="#333" />
    </mj-attributes>
  </mj-head>
  <mj-body background-color="#f5f5f5">
    <mj-section background-color="#ffffff" padding="20px">
      <mj-column>
        <mj-image src="https://acme.com/logo.png" width="120px" />
        <mj-text font-size="24px" font-weight="bold" align="center">
          Welcome, {{name}}
        </mj-text>
        <mj-text>
          Thanks for signing up. Here's how to get started in 3 steps:
        </mj-text>
        <mj-text>
          1. Verify your email by clicking the button below<br />
          2. Complete your profile<br />
          3. Invite your team
        </mj-text>
        <mj-button background-color="#6366f1" href="{{verifyUrl}}" font-size="16px">
          Verify your email
        </mj-button>
        <mj-divider border-color="#e5e7eb" />
        <mj-text font-size="12px" color="#9ca3af">
          You're receiving this because you signed up at acme.com.
          <a href="{{unsubscribeUrl}}" style="color:#6366f1;">Unsubscribe</a>
        </mj-text>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

<!-- Hand-coded HTML — table-based layout for Outlook compat -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Welcome</title>
</head>
<body style="margin:0;padding:0;background:#f5f5f5;font-family:Arial,sans-serif;">
  <table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#f5f5f5;">
    <tr>
      <td align="center" style="padding:20px;">
        <table role="presentation" cellpadding="0" cellspacing="0" border="0" width="600" style="background:#ffffff;border-radius:8px;">
          <tr>
            <td style="padding:32px;">
              <img src="https://acme.com/logo.png" width="120" alt="Acme" style="display:block;border:0;" />
              <h1 style="font-size:24px;color:#111;margin:24px 0 12px;">Welcome, {{name}}</h1>
              <p style="font-size:14px;line-height:1.6;color:#374151;">
                Thanks for signing up.
              </p>
              <table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:24px 0;">
                <tr>
                  <td bgcolor="#6366f1" style="border-radius:6px;">
                    <a href="{{verifyUrl}}" style="display:inline-block;padding:14px 28px;color:#ffffff;text-decoration:none;font-weight:bold;font-size:16px;">
                      Verify your email
                    </a>
                  </td>
                </tr>
              </table>
              <p style="font-size:12px;color:#9ca3af;margin-top:32px;">
                <a href="{{unsubscribeUrl}}" style="color:#9ca3af;">Unsubscribe</a>
              </p>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</body>
</html>

<!-- Compile MJML to HTML -->
<!-- npx mjml template.mjml -o output.html -->

Common Pitfalls

  • Using flexbox or grid — Outlook ignores both, layout breaks
  • External CSS files — most email clients strip them, inline everything
  • Background images — Outlook needs vmlfill, otherwise it's invisible
  • Forgetting alt text on images — many clients block images by default
  • Using rem or em units — Outlook uses px only
  • JavaScript or forms — completely blocked in all email clients

When NOT to Use This Skill

  • For internal-only emails to Gmail-only users — modern HTML works fine
  • For plaintext-only newsletters — skip the HTML entirely

How to Verify It Worked

  • Test in Litmus across 30+ email clients before sending
  • Send to a test inbox in Gmail, Outlook 365, Apple Mail, Outlook 2016
  • Check rendering with images blocked — content should still be readable

Production Considerations

  • Set up template versioning so you can A/B test designs
  • Always include both HTML and plain-text versions
  • Add an unsubscribe link in every email — required by CAN-SPAM
  • Track render rates by client — if Outlook breaks 10% of emails, fix it

Quick Info

CategoryEmail
Difficultyintermediate
Version1.0.0
AuthorClaude Skills Hub
emailhtmldesign

Install command:

Want a Email skill personalized to YOUR project?

This is a generic skill that works for everyone. Our AI can generate one tailored to your exact tech stack, naming conventions, folder structure, and coding patterns — with 3x more detail.