Platform Guide

Building an editable email template

This guide is for anyone on your team designing the HTML template that your content editors will fill in each time they send a campaign. It walks through a small set of markup tags that mark specific parts of your HTML as editable — a headline, a paragraph, an image, or a whole repeating block of articles — so that whoever builds the actual email never has to touch code.

How it works: you write ordinary HTML for the template, then wrap the parts you want editors to change in the tags below. When the template is uploaded, the platform reads those tags and generates a content-editing screen automatically — one field per tag.
Download this template

Single line text

<singleline>

Use this for anything that should stay on one line — a headline, a button caption, a short link. Whatever text sits between the opening and closing tag becomes the placeholder editors see before they type their own copy.

Attributes

label="…"
A short caption shown above the field in the editor, e.g. "Headline" or "Button text".
repeatertitle="true"
Marks this field's text to appear in an automatically generated table of contents — see the section below. Only use this on one field per repeating block.
<h2>
  <singleline label='Pull Quote'>Pull quote goes here</singleline>
</h2>
Pull Quote
<h2>
  A quote your editor typed in
</h2>

Multi line text

<multiline>

Use this for longer copy — an intro paragraph, a description, an article body. Each paragraph the editor types is automatically wrapped in its own <p> tag, so build that into your stylesheet rather than styling the tag itself.

Attributes

label="…"
A caption shown above the field, e.g. "Article" or "Product details".
<multiline label='Main Feature Intro'>Main feature introduction</multiline>
Main Feature Intro
<p>Whatever the editor typed, one &lt;p&gt; per paragraph</p>

Editable images

<img editable>

Add the editable attribute to any ordinary <img> tag and editors will be able to swap it out for their own picture, without leaving the content screen.

Required

width="…"
A fixed pixel width (not a percentage). Anything editors upload that's wider gets scaled down to match; anything narrower is left alone and the width is adjusted to fit it. Leave height unset so images aren't stretched out of proportion.

Options

label="…"
Shown to the editor as a hint for what kind of image belongs there, e.g. "Hero image".
src="…"
A default image that appears until the editor replaces it.
<img editable src="image.jpg" width="200" label='Hero Image' />
Hero Image
Click to replace image
<a href="…">
  <img src="whatever-the-editor-uploaded.jpg" width="200" alt="…">
</a>

Repeating blocks

<repeater>

Wrap a block in <repeater> when an editor might need to add any number of copies of it — a list of articles, a set of featured products, testimonials, and so on. Each repeater needs at least one singleline, multiline, or editable image inside it. You can add as many repeaters as the template needs, but repeaters can't be nested inside one another.

<repeater>
  <h2>
    <singleline label="Title" repeatertitle='true'>Title</singleline>
  </h2>
  <multiline label="Article Body">Enter the full text</multiline>
</repeater>
Title
Article Body
Editors get an "Add another" button beneath this block to create more copies.
<h2>First article title</h2>
<p>Its body copy…</p>

<h2>Second article title</h2>
<p>Its body copy…</p>

Offering multiple layouts

<layout>

Inside a single repeater, you can offer more than one design for editors to choose between each time they add an item — for example, a text-only layout, a layout with an image on the left, and a gallery layout. Every <layout> block needs its own editable content inside it.

Options

label="…"
Names the layout so editors know which to pick, shown as a dropdown when they add a new item. If you leave labels off every layout in the repeater, editors instead cycle through the layouts one click at a time rather than choosing from a list — so either label all of them, or none.
<repeater>
  <layout label='New Feature'>
    <h2><singleline label="Title" repeatertitle='true'>Title</singleline></h2>
    <multiline label="Description">Description</multiline>
  </layout>

  <layout label='Gallery Highlights'>
    <img src="gallery.png" width="140" editable label="Image 1">
    <img src="gallery.png" width="140" editable label="Image 2">
  </layout>
</repeater>
Choose a layout for this item
New Feature Gallery Highlights
Picking one shows only that layout's fields, the same way the sections above work individually.

Table of contents

<tableofcontents>

This generates a linked list of every field you flagged with repeatertitle='true', in the order they appear in the email — handy for newsletters where editors add a variable number of stories and readers expect a jump-to-story list at the top.

<ul>
  <tableofcontents>
    <li><repeatertitle/></li>
  </tableofcontents>
</ul>
<ul>
  <li><a href="#1">First story's title</a></li>
  <li><a href="#2">Second story's title</a></li>
</ul>

<repeatertitle/> only ever needs to be used inside <tableofcontents> — it's what actually prints each linked title.

Turning off tracking or image hosting

Two small flags let you opt individual links or images out of the platform's default behaviour, in case a specific link shouldn't be tracked, or a specific image needs to stay hosted on your own server instead of being copied over.

Skip link tracking

<a href="http://www.example.com" cm_dontconvertlink>this link stays as-is</a>

Skip re-hosting an image

<img src="http://www.example.com/file.jpg" width="400" height="300" alt="…" cm_dontimportimage>

Personalization & dates

[firstname] [fullname] …

Insert details about the specific person receiving the email — their name, email address, or any custom field you store against them — directly into your copy. No editing required each time a campaign goes out.

Subscriber fields

[firstname,fallback="…"]
The recipient's first name, where available.
[lastname,fallback="…"]
The recipient's last name, where available.
[fullname,fallback="…"]
The recipient's full name, where available.
[email]
The recipient's email address.
[yourCustomFieldName,fallback="…"]
Any custom field you store against subscribers — favourite product, membership tier, renewal date — inserts the same way, using whatever name you gave that field.

Always set a fallback value. It's what appears for any subscriber whose record is missing that particular piece of data, so the sentence still reads naturally either way.

Hi [firstname,fallback="there"], thanks for being a member since [memberSince,fallback="day one"]!
Hi Sarah, thanks for being a member since March 2023!

Dates

Add today's date automatically, so a headline like "September Newsletter" updates itself every time you send — no need to edit the template each month.

<currentday>
Day of the month as a number, e.g. 8.
<currentdayname>
Day of the week by name, e.g. Wednesday.
<currentmonth>
Month as a number, e.g. 7.
<currentmonthname>
Month by name, e.g. July.
<currentyear>
Four-digit year, e.g. 2026.
<currentmonthname> <currentday>, <currentyear>
September 16, 2026

Dynamic content

[if] [elseif] [else]

Show or hide chunks of content depending on a subscriber's custom field values, or whether they belong to a particular list or segment — useful for things like showing a different offer to VIP members than to everyone else.

If a field has any value

Wrap content in [if:FieldName]…[endif] to show it only when that custom field isn't empty.

<p>Check out our new products[if:CustomerType] — as a returning customer, you get a discount[endif].</p>
<p>Check out our new products — as a returning customer, you get a discount.</p>
<p>Check out our new products.</p>

If a field equals a specific value

Use [if:FieldName=Value]…[endif] to check for an exact match rather than just "has a value".

<p>Visit our store[if:CustomerType=VIP] — as a VIP, you get 25% off[endif].</p>
<p>Visit our store — as a VIP, you get 25% off.</p>
<p>Visit our store.</p>

If a subscriber belongs to a list or segment

[ifmemberof:"List Name","Other List|Segment Name"]…[endif] checks list or segment membership instead of a custom field. Separate multiple names with commas to match any one of them — for example, a segment called "Segment" that lives inside the list "Other List".

<p>Visit our store[ifmemberof:"My List|VIP Segment"] — as a VIP, you get 25% off[endif].</p>
<p>Visit our store — as a VIP, you get 25% off.</p>
<p>Visit our store.</p>

Either/or content

Add [else] to show alternate copy when the condition doesn't match, instead of showing nothing at all.

<p>Visit our store[if:CustomerType=VIP] — as a VIP, you get 25% off[else] and make sure you become a VIP for future discounts[endif].</p>
<p>Visit our store — as a VIP, you get 25% off.</p>
<p>Visit our store and make sure you become a VIP for future discounts.</p>

Multiple conditions in sequence

Chain as many checks as you need with [elseif:FieldName=Value] before a final [else].

<p>Visit our store[if:CustomerType=VIP] — as a VIP, you get 25% off[elseif:CustomerType=Vendor] — as a partner, you get 30% off[else] and make sure you become a VIP for future discounts[endif].</p>
<p>Visit our store — as a VIP, you get 25% off.</p>
<p>Visit our store — as a partner, you get 30% off.</p>
<p>Visit our store and make sure you become a VIP for future discounts.</p>

Using RSS

<datarepeater type="rss">

If your website already publishes an RSS feed — most blogs and CMS platforms do this automatically — you can pull its latest posts straight into a campaign instead of writing everything out by hand.

Data repeater

Wraps the whole RSS-driven section of the template. Everything placed inside repeats once for each item the feed returns.

src="…"
The feed's URL. You can leave this out and instead let whoever creates each campaign choose the feed at send time.
<h3>The latest from our blog</h3>
<datarepeater type="rss" src="https://example.com/feed">
  <h4><rsstitle tocitem></h4>
  <p>Posted by <rssauthor /> on <rssitemday />/<rssitemmonth /></p>
  <rssimage width="600" />
  <rssbody paragraphs="all" />
</datarepeater>
<h3>The latest from our blog</h3>
<h4><a href="…">Widget King Crowned</a></h4>
<p>Posted by A. Editor on 4/12</p>
<img src="…" width="600">
<p>First paragraph of the post…</p>
<p>Second paragraph…</p>

RSS item dates

Print a post's publish date piece by piece, so it reads naturally in a sentence rather than as a raw timestamp.

<rssitemday />
Day of the month, e.g. 3.
<rssitemdayname />
Weekday name, e.g. Tuesday.
<rssitemmonth />
Month as a number, e.g. 1.
<rssitemmonthname />
Month by name, e.g. January.
<rssitemyear />
Four-digit year, e.g. 2026.

Title & author

<rsstitle tocitem /> <rssauthor />

<rsstitle> prints the post's title as a link back to the original post — add the tocitem attribute to also include it in an automatically generated table of contents. <rssauthor /> prints the author's name as recorded in the feed.

Body

<rssbody paragraphs="" />

Pulls in the post's content. Use paragraphs to limit how much appears — a number, or "all" for the whole entry.

<rssbody paragraphs="2" />
<p>This is the first paragraph of the post.</p>
<p>This is the second paragraph of the post.</p>
<p><a href="…">Read more</a></p>

Image

<rssimage width="" />

Shows the first image attached to a post. Only one image per item is supported, taken from an <enclosure> or <media:content> entry in the feed.

<rssitemlink />
Links back to the post on your site. Leave the tag empty for the default "Read more…" wording, or add your own text between the tags.
<rsscommentlink />
Links to that post's comments. Defaults to "See the comments…" unless you supply your own wording.

Multiple layouts

Just like the layout option under Making Content Editable, you can offer more than one design inside an RSS block — for example, a richer layout for the first item and a plainer, text-only layout for the rest. The feed's items simply loop through whichever layouts you provide.

<datarepeater type="rss" src="https://example.com/feed">
  <layout>
    <h4><rsstitle tocitem></h4>
    <rssimage width="600" />
    <rssbody paragraphs="all" />
  </layout>
  <layout>
    <h4><rsstitle tocitem></h4>
    <rssbody paragraphs="1" />
  </layout>
</datarepeater>
<h4><a href="…">King Widget!</a></h4>
<img src="…" width="600">
<p>Full write-up of the first post…</p>

<h4><a href="…">Auction update</a></h4>
<p>Short teaser for the second post…</p>

Facebook and Twitter sharing tags work the same way inside an RSS block as they do anywhere else — see Social Sharing below.

Social sharing

Give subscribers an easy way to share the campaign — or a specific link — on Facebook or X (formerly Twitter).

Facebook share

<fbshare>

Creates a share link. Leave it empty for the default share button image, or add your own text or image between the tags.

likeurl="…"
The page you want shared — defaults to the campaign itself if left out.
<fbshare likeurl="https://example.com">Share on Facebook</fbshare>

Tweet

<tweet>

Creates a link that shares the campaign's public web link on X. Leave it empty for the default image, or add your own text or image.

via="…"
A handle credited as the post's source.
recommend="…"
A handle suggested as a follow once the post goes out.
<tweet via="yourhandle" recommend="brandhandle">Share this</tweet>