Custom HTML mode (set via Email Settings → Template mode → Custom HTML) lets you replace Outpost’s entire email shell with your own HTML. Your template wraps the post content and the footer, and you control the full layout. This guide explains exactly how Outpost processes your template at send time so you can avoid the failure modes that are unique to this feature.Documentation Index
Fetch the complete documentation index at: https://documentation.outpost.pub/llms.txt
Use this file to discover all available pages before exploring further.
When to use it (and when not to)
Use the standard Default Design settings unless you need something they genuinely cannot express, such as:- A custom masthead (a text wordmark, a multi-element header, a non-centered logo)
- A precise CTA button shape, or per-element layout the standard slots don’t expose
- A section treatment (a tinted “featured” band, a custom divider) that isn’t available as a setting
How Outpost renders your template
At send time Outpost runs two passes over your template. Understanding both is the difference between a template that works and one that breaks silently.Pass 1 — merge-tag substitution
Outpost performs a literal, global string replacement for every merge tag (the%NAME% tokens). This replacement runs over the entire template string with no awareness of HTML structure.
Pass 2 — CSS inlining
Outpost extracts the CSS from the<style> block(s) in your template and inlines those rules onto the post body before injecting it at %BODY%. This is how your typography and link colors reach the post content.
Two consequences to design around:
- Your element rules restyle the post content. A blanket rule like
a { color: #1B3A5C },p { margin: 0 0 16px }, orblockquote { … }is stamped onto every matching element inside the post body, overriding any inline styling the author applied in the editor. This is usually what you want (brand consistency), but it means an author cannot, for example, set a one-off link color in a post and have it survive. - Structural rules stay on your shell.
body,html, andtablerules in your<style>apply to your outer layout and are not leaked onto the injected post fragment. You can put structural CSS onbody/tablewithout corrupting the post content.
<head> styles and ignore <style> blocks inconsistently, keep your real layout in inline style="…" attributes on the table elements. Treat the <style> block as defaults for the injected post content, not as your primary layout mechanism.
Merge tags
| Tag | Description |
|---|---|
%BODY% | The rendered post/email content (inject this exactly once) |
%CURRENT_DATE% | Today’s date |
%SITE_NAME% / %BLOG_NAME% | Your publication name |
%SITE_URL% / %BLOG_URL% | Your publication URL |
%SITE_PATH% / %BLOG_PATH% | Your site’s base path |
%SITE_LOGIN_URL% / %BLOG_LOGIN_URL% | Your publication’s sign-in URL |
%ACCOUNT_LINK% | Member’s account page URL |
%EMAIL_FROM_NAME% | The sender name from Email Settings |
%EMAIL_HEADER_IMAGE% | The uploaded header image URL (only substituted if a header image is set) |
%PHYSICAL_ADDRESS% | Your mailing address from Email Settings, formatted with line breaks (see Compliance) |
%SUBSCRIPTION_EXPIRATION_DATE% | The recipient’s subscription expiration date |
%UNSUBSCRIBE_URL% | The recipient’s unsubscribe link (required, see Compliance) |
The
%BLOG_*% and %SITE_*% prefixes are interchangeable: %BLOG_NAME% and %SITE_NAME% produce the same output.Conditional content blocks
Wrap content so it only renders for paid or free members:| Tag pair | Shows the wrapped content to |
|---|---|
%RECIPIENT.PAID_BLOCK_START% … %RECIPIENT.PAID_BLOCK_END% | Paid members only |
%RECIPIENT.FREE_BLOCK_START% … %RECIPIENT.FREE_BLOCK_END% | Free members only |
_END tags are honored. Always close every block you open.
Fonts
Most email clients strip the Google Fonts<link> that Outpost includes, including Gmail and Outlook for Windows desktop, which together dominate most audiences. A web font you specify will only render in a minority of inboxes (Apple Mail, recent Outlook for Mac, Samsung Mail, Thunderbird).
For a font that renders consistently everywhere, choose a system font in your inline styles: Arial, Georgia (the one widely available serif), Verdana, Times New Roman, Courier. If you want a web font, always provide a system fallback in the same family (serif fallback for a serif, sans fallback for a sans), because the fallback is what most recipients will actually see.
CTA buttons
CTA buttons come from the post body, not from your template shell. Outpost renders an editor button as<a class="btn btn-primary"> inside <p class="text-center">. In Custom HTML mode, Outpost’s default button styling does not apply, so if you don’t style these classes your button renders as an unstyled link.
Style the button by targeting the classes directly in your <style> block (the button is the anchor, so target .btn / .btn-primary, never a descendant a):
Outlook and dark mode
-
Fixed-width centered card: Outlook for Windows centers a fixed-width table unreliably. Wrap your card in a Microsoft-Office conditional “ghost table” so it stays 600px and centered:
-
Dark mode: Apple Mail and some Outlook clients auto-invert light backgrounds, which can turn a white card dark and wreck your contrast. Declaring light-only color schemes reduces (but does not fully prevent) this:
Always confirm contrast in a real dark-mode client; no setting guarantees the card stays light everywhere.
Compliance (required)
A Custom HTML Template replaces Outpost’s default footer, so you are responsible for the legal footer. Your template must include:- An unsubscribe link, using
%UNSUBSCRIBE_URL%. - Your physical mailing address.
%PHYSICAL_ADDRESS% in your footer. It is rendered with line breaks, so the first line of that field can be your publication name.
Preview the template
The Custom HTML editor has a Preview tab that renders your template in the browser, with a Free Member / Paid Member toggle so you can check your%RECIPIENT.PAID_BLOCK_*% and %RECIPIENT.FREE_BLOCK_*% conditional blocks. It’s good for fast visual iteration on the shell: masthead, spacing, colors, and fonts.
Testing
There is no substitute for real test sends to real inboxes. Send a complete post (heading, body paragraphs, an inline link, a list, a blockquote, and a CTA button) to test accounts and check, at minimum:- Gmail (web and mobile app) — the largest reach for most audiences
- Outlook for Windows desktop — the worst-case renderer; if it holds here, it holds almost everywhere
- Apple Mail (macOS and iOS) — including dark mode
- Outlook.com web and Yahoo Mail
%PHYSICAL_ADDRESS% is present. If a layout fails in Outlook for Windows, the fix is in your template, not in your Email Settings.

