We use cookies to improve your experience and analyze site traffic. By clicking "Accept", you consent to our use of cookies. See our Privacy Policy for details.

Customizing Reader Email Templates

Rewrite the emails your readers get — purchase receipts, welcome, subscription and new-issue emails — with your own subject lines, wording and design.

Customizing Reader Email Templates

ZenFlip sends your readers automatic emails — a receipt when they buy, a welcome when they sign up, reminders about their subscription, and an announcement when you publish a new issue. You can rewrite any of these with your own subject line, wording and design. Your version is used for your organization only.

Who can do this: owners and admins, on the Business plan and above.

Where: in the dashboard's left sidebar, under Commerce, click Email Templates (it opens Settings → Email Templates).


The emails you can customize

Only these ten reader emails can be customized. Account emails such as activation and password reset always use ZenFlip's built-in version.

Email

When it's sent

Variables you can use

Purchase Confirmation

A reader buys a single publication

readerName (may be empty), publicationTitle, formattedAmount, paymentId, readUrl, publisherName (may be empty), purchaseDate, invoiceUrl (may be empty), year

Reader Welcome

A new reader creates an account on your storefront

readerName (may be empty), publisherName (may be empty), storefrontUrl (may be empty), year

Subscription Activated

A reader starts a subscription

readerName (may be empty), planName, formattedAmount, interval, publisherName (may be empty), storefrontUrl (may be empty), invoiceUrl (may be empty), year

Subscription Expiring

7 days before a subscription expires

readerName (may be empty), planName, expiryDate, renewUrl, publisherName (may be empty), year

Subscription Expired

A subscription has expired

readerName (may be empty), planName, renewUrl, publisherName (may be empty), year

Subscription Cancelled

A reader cancels their subscription

readerName (may be empty), planName, accessExpiresAt (may be empty), publisherName (may be empty), year

Access Granted

A reader gets access through an access code or a gift

readerName (may be empty), publicationTitle, readUrl (may be empty), publisherName (may be empty), expiresAt (may be empty), year

Collection Purchase Confirmation

A reader buys a collection

readerName (may be empty), collectionTitle, formattedAmount, paymentId, collectionUrl, publisherName (may be empty), purchaseDate, invoiceUrl (may be empty), year

Cart Purchase Confirmation

A reader buys several items in one checkout

readerName (may be empty), itemCount, formattedAmount, paymentId, libraryUrl, publisherName (may be empty), purchaseDate, invoiceUrl (may be empty), year

New Issue Published

The first time you publish a publication — sent to your existing readers

readerName (may be empty), publicationTitle, readUrl (may be empty), publisherName (may be empty), hasAccess, unsubscribeUrl (may be empty), year

Variables marked (may be empty) can be missing for some readers — for example a reader who never entered a name, a free grant with no invoice, or access that never expires. Wrap these in {{#if …}} (see below) so the email still reads well without them.

Variable names are case-sensitive: {{readerName}} works, {{ReaderName}} prints nothing.

What the values look like

  • Amounts arrive already formatted with the currency, e.g. $9.99 or ₹623.

  • Dates arrive already formatted, e.g. September 15, 2026.

  • Links (readUrl, storefrontUrl, renewUrl, collectionUrl, libraryUrl, invoiceUrl) point to your storefront — including your custom domain if you have one. Always use the variable rather than pasting a fixed link.

  • Has access: hasAccess (New Issue Published only) is true when that reader can already read the full issue — they bought it, subscribed, or it's free.

  • Year: year is the current year, filled in on every send.


The editor

Click a template in the list to open it. A template in the list shows Customized when your version is live, Inactive when you've saved a version but it's switched off, and no badge when readers get the default.

The editor has, from top to bottom:

  1. The on/off switch. "Custom template is active" means readers get your version. "Using default system template" means they get ZenFlip's built-in email, even if you've saved changes.

  2. Available Variables. Click a variable to copy it, then paste it into the subject or the template.

  3. Subject Line. The email's subject; the default is shown underneath. You can use variables here too, e.g. New issue: {{publicationTitle}}.

  4. Template. The email body, with three tabs (described below).

  5. Save Template, Send Preview to Me and Reset to Default buttons.

The three Template tabs:

  • Preview shows how the email will look, with sample values filled in. The editor opens here.

  • HTML is the email's actual HTML. Make design changes here.

  • Editor is a simple rich-text editor. It can't keep an email layout (tables, styled buttons, spacing): editing there turns buttons into plain links and can move {{#if}} blocks to the wrong place. For designed emails use the HTML tab. A warning appears in the Editor tab when this applies.

When you open a template you haven't customized yet, it's pre-filled with ZenFlip's default design, already showing your organization's name and logo. Edit that rather than starting from scratch.


Step by step

  1. Open Email Templates and click the email you want to change.

  2. Change the Subject Line if you like.

  3. Click the HTML tab and edit the wording or design. Keep the variables and {{#if}} blocks you still want.

  4. Click Preview to check how it looks.

  5. Turn the switch on ("Custom template is active").

  6. Click Save Template.

  7. Click Send Preview to Me and check the email in your inbox.


Writing templates: Handlebars basics

Templates use Handlebars. You only need three things.

Insert a value:

<p>Thanks for your purchase, {{readerName}}!</p>

Show something only when a value exists:

<p>Hi{{#if readerName}} {{readerName}}{{/if}},</p>

{{#if invoiceUrl}}<a href="{{invoiceUrl}}">Download your invoice</a>{{/if}}

Show one thing or another:

{{#if hasAccess}}<p>{{publicationTitle}} is already in your library.</p>{{else}}<p>{{publicationTitle}} is out now. Take a look inside.</p>{{/if}}

{{#unless x}}...{{/unless}} is the opposite of {{#if}}: its content shows when x is empty.

Rules that matter:

  • Blocks must match. Every {{#if}} needs a matching {{/if}}, and every {{ needs a closing }}. If something doesn't match, Save Template shows an "Invalid Handlebars template" message saying where, and nothing is saved until it's fixed.

  • Values are made safe automatically. A reader name like <b>Jo</b> shows as text, not bold. Don't use triple braces.

  • Unlisted variables print nothing. A variable that isn't in that email's list is blank; for example {{publicationTitle}} is empty in Reader Welcome.

  • There are no formatting helpers (no date or currency functions). Values already arrive formatted.

A button that works in every email client

Email apps ignore most CSS, so style the button inline and keep it inside its {{#if}}:

{{#if readUrl}}<a href="{{readUrl}}" style="display:inline-block;padding:14px 36px;background:#4F46E5;color:#ffffff;text-decoration:none;font-weight:600;border-radius:8px;">Start Reading</a>{{/if}}

Change the background colour to match your brand.

Email-safe HTML tips

  • Lay emails out with <table>s and inline style="…" attributes. <style> blocks, external stylesheets and scripts are removed or ignored by many email apps.

  • Keep the content about 600px wide.

  • Images need a full https:// address.

  • Use web-safe fonts (Arial, Helvetica, Georgia) or accept a fallback.


Things worth knowing

  • The switch decides what readers get. Saving with the switch off stores your version as Inactive and readers keep getting the default.

  • Leaving a field empty uses the default. An empty Subject Line sends the default subject; an empty template sends the default body (with your custom subject, if you set one).

  • Your organization's name and logo are written into the template when you first open it. If you later rename your organization or change your logo, update your custom template — or reset it and customize again.

  • Send Preview to Me saves your changes first, then emails you a copy marked [PREVIEW] using sample values (e.g. "Jane Reader", "Sample Publication"). If the switch is off, the preview shows the default email. Previews come from ZenFlip's standard sender address, even if you've set up your own email domain.

  • The Preview tab shows the "everything present" version — every {{#if}} shows its first branch. For New Issue Published that's the wording for readers who own the issue; other readers get your {{else}} wording.

  • New Issue Published goes to readers who already have something from you in their library, the first time a publication is published (not on re-publish). Use {{#if hasAccess}} so you only tell readers "it's in your library" when it really is. It's the only one of these emails with an unsubscribe link — keep the {{#if unsubscribeUrl}} block. Readers who unsubscribed don't receive it.

  • Sender address: emails come from your own domain once you set it up under Settings → Email Domain; otherwise they come from ZenFlip's standard address.

  • Reset to Default permanently removes your customized version of that email and goes back to ZenFlip's built-in one.

Something not working? See Email template troubleshooting.

Customizing Reader Email Templates | ZenFlip Help Center | ZenFlip