Email Content Guide
Rules and constraints for writing email content that lands in the inbox. Apply these every time you generate email copy, build a template, or help debug spam placement.
How to Use This Skill
These are CONSTRAINTS, not suggestions. Apply them automatically when writing any email content. Do not wait for the user to ask about deliverability.
Subject Lines
- Under 50 characters (40 is ideal for mobile preview)
- No ALL CAPS words
- No excessive punctuation (!! or ???)
- No misleading Re: or Fwd: prefixes
- Be specific about what's inside the email
- Personalize when data is available (e.g., include first name or company)
- Front-load the important words (mobile truncates after ~35 chars)
Spam Trigger Words to Avoid in Subjects
Financial: free, bonus, cash, earn, income, investment, profit, money, discount, save, lowest price, bargain, cheap
Urgency: act now, limited time, expires, hurry, don't miss, last chance, only today, deadline, while supplies last
Claims: guaranteed, no obligation, risk-free, 100%, promise, winner, selected, congratulations, you've been chosen
Pressure: order now, buy now, click here, call now, apply now, sign up free, subscribe now
Symbols: $$$, excessive exclamation marks (!!!), all caps words, emoji overuse in subject
Preheader Text
- Always include preheader/preview text (40-130 characters)
- Complement the subject line, do not repeat it
- If left empty, email clients show the first line of body text (often looks broken)
- Use it to add context that helps the reader decide to open
Email Body
Structure
- Single primary CTA: One clear action per email. Secondary links are fine in navigation, but the main message drives one action.
- Inverted pyramid: Most important content first, supporting details below, CTA at the bottom.
- Scannable: Use headings, short paragraphs (2-3 sentences), bullet points for lists.
- Width: 600px max for content area. Mobile-first.
Content Rules
- Plain text version: ALWAYS include alongside HTML. HTML-only emails are flagged by some filters.
- Text-to-image ratio: At least 60% text, maximum 40% images. Image-only emails are heavily penalized.
- No URL shorteners: Never use bit.ly, tinyurl, t.co, etc. Use full domain links. Shorteners are associated with phishing.
- Link count: Maximum 5-7 links total (including footer). High link count looks spammy.
- No JavaScript: Stripped by all email clients. Never include script tags.
- Images: Always include alt text. Host on your domain or a CDN you control. Don't embed base64 images.
- No invisible text: White text on white background is a spam signal.
Personalization
- Use real data:
{{firstName}}, {{companyName}}, {{planName}}
- Fallback values: Always provide defaults for missing data (
{{firstName | "there"}})
- Don't over-personalize: Using too many personal data points in one email feels invasive
Unsubscribe (Required for Marketing)
Every marketing or promotional email MUST include:
- Visible unsubscribe link in the email body (typically in footer)
- List-Unsubscribe header (RFC 8058):
List-Unsubscribe: <mailto:unsubscribe@yourapp.com>, <https://yourapp.com/unsubscribe?id={{contactId}}>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
- One-click functionality: Unsubscribe MUST work without requiring login
- Physical mailing address (CAN-SPAM requirement)
Transactional emails (password reset, order confirmation, etc.) do NOT require unsubscribe but MUST NOT contain promotional content.
Content by Email Type
Transactional
Password resets, order confirmations, welcome emails, account notifications.
- Send immediately (no delay, no batching)
- Minimal, functional design (not marketing-style)
- No promotional content (mixing promo into transactional emails degrades sender reputation)
- Clear action: What does the user need to do?
- Include context: What triggered this email (e.g., "You requested a password reset")
- Keep subject line factual: "Your password reset link" not "Don't miss your new password!"
Marketing
Newsletters, promotions, announcements, product updates.
- Include unsubscribe + email preferences link
- Segment by engagement (don't email users who haven't opened in 90+ days)
- Respect frequency expectations set during signup
- Physical mailing address in footer
- Clear sender identity (From name should be recognizable)
- Subject should set accurate expectations for content
Automated / Lifecycle
Onboarding sequences, re-engagement, abandoned cart, renewal reminders.
- Reference the trigger event: "You signed up 3 days ago" or "Your trial ends in 7 days"
- Timely: Send at appropriate intervals (don't send 5 onboarding emails in one day)
- Progressive: Each email in a sequence should add new value, not repeat
- Exit conditions: Stop the sequence when the goal is achieved
- Personalize with real behavior data, not generic placeholders
HTML Email Best Practices
Layout
- Table-based layouts (flexbox and CSS grid do not work reliably in Outlook, Gmail, or Yahoo)
- Inline CSS or use a framework like React Email that handles inlining
<td> for layout cells, <table> for structure
- Width attributes on tables:
width="600" for outer container
Compatibility
- Test in: Gmail (web + mobile), Outlook (desktop + web), Apple Mail, Yahoo Mail
- Dark mode: Include
<meta name="color-scheme" content="light dark"> and test dark mode rendering
- Font stacks: System fonts or web-safe only. Custom web fonts don't work in most email clients:
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
Responsive
- Media queries for mobile (not all clients support them, so design mobile-first)
- Minimum tap target: 44x44px for buttons and links on mobile
- Single-column layout for widths under 480px
Accessibility
- Minimum 14px font size for body text (16px preferred)
- Color contrast ratio: 4.5:1 minimum for text
- Semantic HTML: Use
<h1>-<h3>, <p>, <ul>/<ol> appropriately
- Alt text on every image (describe the content, not "image" or "photo")
- Don't convey information only through color (add text labels)
- Descriptive link text: "Read the full report" not "Click here"
- Language attribute:
<html lang="en"> on the root element
- Role attribute:
<table role="presentation"> for layout tables
Compliance Quick Reference
CAN-SPAM (US)
- Accurate From/Reply-To headers
- Non-deceptive subject lines
- Physical postal address
- Working unsubscribe mechanism
- Honor opt-outs within 10 business days
GDPR (EU)
- Explicit opt-in consent for marketing
- Right to access data on request
- Right to erasure on request
- Record of consent
- Lawful basis documented
CASL (Canada)
- Express consent required (written/verbal)
- Implied consent limited to existing relationships
- Honor unsubscribe within 10 days
- Clear sender identification
Pre-Send Checklist
Apply before sending or generating any email:
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: email-content-guide3description: Best practices for email content that avoids spam filters. Apply these rules when writing email copy, building templates, or debugging spam placement issues. Use when this capability is needed.4---56# Email Content Guide78Rules and constraints for writing email content that lands in the inbox. Apply these every time you generate email copy, build a template, or help debug spam placement.910## How to Use This Skill1112These are CONSTRAINTS, not suggestions. Apply them automatically when writing any email content. Do not wait for the user to ask about deliverability.1314## Subject Lines1516- Under 50 characters (40 is ideal for mobile preview)17- No ALL CAPS words18- No excessive punctuation (!! or ???)19- No misleading Re: or Fwd: prefixes20- Be specific about what's inside the email21- Personalize when data is available (e.g., include first name or company)22- Front-load the important words (mobile truncates after ~35 chars)2324### Spam Trigger Words to Avoid in Subjects2526**Financial**: free, bonus, cash, earn, income, investment, profit, money, discount, save, lowest price, bargain, cheap27**Urgency**: act now, limited time, expires, hurry, don't miss, last chance, only today, deadline, while supplies last28**Claims**: guaranteed, no obligation, risk-free, 100%, promise, winner, selected, congratulations, you've been chosen29**Pressure**: order now, buy now, click here, call now, apply now, sign up free, subscribe now30**Symbols**: $$$, excessive exclamation marks (!!!), all caps words, emoji overuse in subject3132## Preheader Text3334- Always include preheader/preview text (40-130 characters)35- Complement the subject line, do not repeat it36- If left empty, email clients show the first line of body text (often looks broken)37- Use it to add context that helps the reader decide to open3839## Email Body4041### Structure4243- **Single primary CTA**: One clear action per email. Secondary links are fine in navigation, but the main message drives one action.44- **Inverted pyramid**: Most important content first, supporting details below, CTA at the bottom.45- **Scannable**: Use headings, short paragraphs (2-3 sentences), bullet points for lists.46- **Width**: 600px max for content area. Mobile-first.4748### Content Rules4950- **Plain text version**: ALWAYS include alongside HTML. HTML-only emails are flagged by some filters.51- **Text-to-image ratio**: At least 60% text, maximum 40% images. Image-only emails are heavily penalized.52- **No URL shorteners**: Never use bit.ly, tinyurl, t.co, etc. Use full domain links. Shorteners are associated with phishing.53- **Link count**: Maximum 5-7 links total (including footer). High link count looks spammy.54- **No JavaScript**: Stripped by all email clients. Never include script tags.55- **Images**: Always include alt text. Host on your domain or a CDN you control. Don't embed base64 images.56- **No invisible text**: White text on white background is a spam signal.5758### Personalization5960- Use real data: `{{firstName}}`, `{{companyName}}`, `{{planName}}`61- Fallback values: Always provide defaults for missing data (`{{firstName | "there"}}`)62- Don't over-personalize: Using too many personal data points in one email feels invasive6364## Unsubscribe (Required for Marketing)6566Every marketing or promotional email MUST include:67681. **Visible unsubscribe link** in the email body (typically in footer)692. **List-Unsubscribe header** (RFC 8058):70 ```71 List-Unsubscribe: <mailto:unsubscribe@yourapp.com>, <https://yourapp.com/unsubscribe?id={{contactId}}>72 List-Unsubscribe-Post: List-Unsubscribe=One-Click73 ```743. **One-click functionality**: Unsubscribe MUST work without requiring login754. **Physical mailing address** (CAN-SPAM requirement)7677Transactional emails (password reset, order confirmation, etc.) do NOT require unsubscribe but MUST NOT contain promotional content.7879## Content by Email Type8081### Transactional8283Password resets, order confirmations, welcome emails, account notifications.8485- Send immediately (no delay, no batching)86- Minimal, functional design (not marketing-style)87- No promotional content (mixing promo into transactional emails degrades sender reputation)88- Clear action: What does the user need to do?89- Include context: What triggered this email (e.g., "You requested a password reset")90- Keep subject line factual: "Your password reset link" not "Don't miss your new password!"9192### Marketing9394Newsletters, promotions, announcements, product updates.9596- Include unsubscribe + email preferences link97- Segment by engagement (don't email users who haven't opened in 90+ days)98- Respect frequency expectations set during signup99- Physical mailing address in footer100- Clear sender identity (From name should be recognizable)101- Subject should set accurate expectations for content102103### Automated / Lifecycle104105Onboarding sequences, re-engagement, abandoned cart, renewal reminders.106107- Reference the trigger event: "You signed up 3 days ago" or "Your trial ends in 7 days"108- Timely: Send at appropriate intervals (don't send 5 onboarding emails in one day)109- Progressive: Each email in a sequence should add new value, not repeat110- Exit conditions: Stop the sequence when the goal is achieved111- Personalize with real behavior data, not generic placeholders112113## HTML Email Best Practices114115### Layout116117- Table-based layouts (flexbox and CSS grid do not work reliably in Outlook, Gmail, or Yahoo)118- Inline CSS or use a framework like React Email that handles inlining119- `<td>` for layout cells, `<table>` for structure120- Width attributes on tables: `width="600"` for outer container121122### Compatibility123124- Test in: Gmail (web + mobile), Outlook (desktop + web), Apple Mail, Yahoo Mail125- Dark mode: Include `<meta name="color-scheme" content="light dark">` and test dark mode rendering126- Font stacks: System fonts or web-safe only. Custom web fonts don't work in most email clients:127 ```css128 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;129 ```130131### Responsive132133- Media queries for mobile (not all clients support them, so design mobile-first)134- Minimum tap target: 44x44px for buttons and links on mobile135- Single-column layout for widths under 480px136137## Accessibility138139- Minimum 14px font size for body text (16px preferred)140- Color contrast ratio: 4.5:1 minimum for text141- Semantic HTML: Use `<h1>`-`<h3>`, `<p>`, `<ul>/<ol>` appropriately142- Alt text on every image (describe the content, not "image" or "photo")143- Don't convey information only through color (add text labels)144- Descriptive link text: "Read the full report" not "Click here"145- Language attribute: `<html lang="en">` on the root element146- Role attribute: `<table role="presentation">` for layout tables147148## Compliance Quick Reference149150### CAN-SPAM (US)1511521. Accurate From/Reply-To headers1532. Non-deceptive subject lines1543. Physical postal address1554. Working unsubscribe mechanism1565. Honor opt-outs within 10 business days157158### GDPR (EU)1591601. Explicit opt-in consent for marketing1612. Right to access data on request1623. Right to erasure on request1634. Record of consent1645. Lawful basis documented165166### CASL (Canada)1671681. Express consent required (written/verbal)1692. Implied consent limited to existing relationships1703. Honor unsubscribe within 10 days1714. Clear sender identification172173## Pre-Send Checklist174175Apply before sending or generating any email:176177- [ ] Subject line under 50 chars, no spam trigger words, no ALL CAPS178- [ ] Preheader text included and complements subject179- [ ] Plain text version present alongside HTML180- [ ] Single clear primary CTA181- [ ] Links use full URLs (no shorteners), 7 or fewer total182- [ ] Images have alt text, hosted on your domain183- [ ] Unsubscribe link visible and working (marketing emails)184- [ ] Physical address included (marketing emails)185- [ ] List-Unsubscribe header set (marketing emails)186- [ ] Mobile preview looks good at 320px width187- [ ] Dark mode doesn't break layout or hide content188- [ ] No spam trigger words in subject or body189- [ ] Text-to-image ratio is at least 60/40190191---192> Converted and distributed by [TomeVault](https://tomevault.io/claim/wraps-team) — claim your Tome and manage your conversions.193<!-- tomevault:4.0:skill_md:2026-04-13 -->