Skip to main content
The content of a campaign is the email itself — the subject line, the sender details, and the body that recipients see in their inbox. Lettr gives you several ways to build that body, depending on whether you want a visual drag-and-drop experience, full control over the HTML, or both. This page covers content building, personalization with merge tags, and how to test your work before sending.

Subject Line

The subject is the first thing recipients see and the single biggest driver of whether they open your email. Lettr’s Compose step gives you two helpers:
  • AI subject generation — if you fill in a prompt when starting the campaign, Lettr suggests a subject line based on what you described. Useful as a starting point even if you rewrite it.
  • Spam check — click the spam check button next to the subject field and Lettr runs an AI scan that flags words and patterns commonly associated with spam filters (excessive punctuation, all-caps phrases, urgency words). You’ll see specific warnings rather than just a score.
Subject lines can be up to 998 characters (the standard email header limit), but anything past about 50 characters gets cut off on most mobile clients. Aim for short. You can use merge tags in the subject — for example, Welcome to Acme, {{first_name}}! — just like in the body.

Sender Details

Three fields make up the sender:
FieldDescription
From addressA local part you choose plus a domain from your team’s verified sending domains. For example, newsletter@yourdomain.com.
From nameThe display name shown next to the address in the recipient’s inbox. Use your brand or product name.
Reply-toOptional. Leave blank to keep replies going to the from address, or set a separate address (for example, a support inbox).
The from address must be on a sending domain you’ve verified for your team. If you try to send a campaign from an unverified domain, the send will fail at the delivery stage. The domain picker in the builder only shows verified domains, so this shouldn’t normally happen — but if you remove a domain after building a campaign, the campaign will fail when you try to send it.

Content Editors

The body of a campaign can be built three ways. You can mix and match — for example, design the foundation in the visual editor and then drop into the HTML editor for fine-tuning.

Visual Editor

The default editor is a drag-and-drop builder (powered by Topol). It exposes pre-built content blocks — headers, columns, buttons, images, dividers, footers — that you arrange in a canvas. The editor handles responsive design, dark-mode rendering, and the email-safe HTML output for you. This is the right choice when:
  • You want to produce a polished, branded email without writing HTML
  • You’re comfortable working visually rather than in code
  • Your campaign needs to look good across many email clients (the editor outputs MJML-based markup that’s been tested for cross-client compatibility)
Lettr also automatically organizes campaign templates and assets into a dedicated Campaigns folder within your template library.

Raw HTML Editor

If you have a custom design that doesn’t fit the block model — or you’d rather paste in HTML you’ve built elsewhere — open the full-screen HTML editor (the Edit content button in the builder). You get:
  • A code editor with syntax highlighting on the left
  • A live iframe preview on the right
  • An AI chat panel that can apply natural-language edits to the HTML (for example “make the button blue”, “shorten the intro paragraph”)
This is the right choice when:
  • You’re starting from existing HTML email markup
  • You need fine control over inline styles, dark-mode CSS, or specific client quirks
  • You want to use Lettr’s AI to iterate quickly on a hand-coded design
Saves from the HTML editor flow back into the campaign immediately. If you switch back to the visual editor after editing HTML, the visual editor reopens with the latest content.

Linking a Template

You can link a campaign to one of your templates instead of writing content directly. To link, choose Use template in the Compose step and pick a template marked for campaign use. Linking does two things:
  1. Copies the template’s HTML into the campaign so you can preview, test, and send
  2. Sets up a sync between the template and any Draft campaigns linked to it
While the campaign is still in Draft, future edits to the template’s HTML automatically propagate to the campaign. Once the campaign moves out of Draft (when you schedule or send it), the HTML is frozen — later template edits don’t affect it.
If you link a template and then make edits directly in the campaign’s HTML editor while still in Draft, the next time the source template is saved your changes will be overwritten with the template’s version. If you want to diverge from the template, unlink the template from the campaign before editing, or finish your campaign customizations after you’ve stopped editing the template.

Personalization

You can personalize the subject and body with merge tags that pull values from the recipient’s contact record. The syntax is {{name}} — wrap any custom property name in double curly braces.
<p>Hi {{first_name}},</p>
<p>Thanks for signing up to {{plan}}. Your account is ready.</p>
When the campaign sends, each recipient gets their own values substituted in. The values come from:
  • The recipient’s email — always available as {{email}}
  • Custom properties you’ve defined for your team — see Custom Properties
If a recipient doesn’t have a value set for a property, the fallback value on the property is used. If the property has no fallback either, the merge tag is replaced with an empty string.
Always set fallbacks on properties you use in subjects or visible body text. “Hi !” reads strangely to recipients whose first name you don’t know — “Hi there!” reads naturally with a fallback of there.
Every campaign you send through Lettr must include an unsubscribe mechanism. Lettr exposes this as a merge tag: {{unsubscribe_link}}. At send time it’s replaced with a unique per-recipient URL that, when clicked, marks the contact as unsubscribed and fires the corresponding webhook event. A typical footer looks like:
<p style="font-size: 12px; color: #666;">
  You're receiving this because you signed up at yourdomain.com.
  <a href="{{unsubscribe_link}}">Unsubscribe</a>
</p>
You can also customize the page recipients land on after unsubscribing using the optional redirect form:
<a href="{{unsubscribe_link:redirect=https://yourdomain.com/unsubscribed}}">Unsubscribe</a>
After they unsubscribe, Lettr redirects to your URL with a confirmation parameter so you can show a “Sorry to see you go” page on your own site. Because the unsubscribe link is mandatory for marketing campaigns (transactional: false), Lettr enforces it for you. If your campaign HTML doesn’t contain {{unsubscribe_link}} (or the raw SparkPost variant {{unsubscribe_url}}) by the time you send, Lettr automatically appends a minimal default footer right before the closing </body> tag. The same fallback is applied to test emails so they always remain compliant. You’ll see this surfaced as a warning in the campaign builder in two places:
  • In the HTML editor: a banner above the code editor flags that no unsubscribe tag was found and offers an Insert link button that drops a styled footer into your HTML.
  • On the Review step: the same warning appears next to Send a test email, reminding you that Lettr will append the default footer to the test send and to every real send.
Neither warning blocks you from saving the template or sending the test. The fallback is a safety net, not a gate. If you want full control over the styling and copy, add {{unsubscribe_link}} to your own footer and the auto-append is skipped.
Even with the automatic fallback, you should include your own unsubscribe link. The default footer is intentionally plain so it doesn’t clash with your design, and recipients are more likely to use a clearly branded unsubscribe link than a generic one. Without a visible unsubscribe path you also risk:
  • Recipients marking you as spam (which damages your sender reputation)
  • Compliance issues under CAN-SPAM, GDPR, and similar laws
  • Mailbox providers like Gmail and Yahoo throttling or blocking your sends
See List Hygiene and Unsubscribe Best Practices for guidance.
For recipients whose email client renders your campaign poorly (older Outlook versions, dark-mode quirks, image blocking, very narrow mobile clients), Lettr provides an optional merge tag that links to a hosted, in-browser version of the email: {{webversion_link}}. When the campaign sends, the tag is replaced with a unique signed URL for that recipient. Opening it loads a personalized render of the email, with the recipient’s merge values already substituted in. A typical header link looks like:
<p style="font-size: 12px; color: #666; text-align: center;">
  Trouble viewing this email?
  <a href="{{webversion_link}}">View it in your browser</a>
</p>
The web-version tag is fully optional. If you don’t include {{webversion_link}} in your HTML, nothing is added automatically and no hosted page is generated for that send. Unlike the unsubscribe link, there’s no fallback and no warning in the editor.
Test emails substitute {{webversion_link}} with a preview URL that renders the campaign against your own data, so you can click through during QA without needing a real recipient record.

Previewing Your Campaign

Before sending you can:
  • See a live preview of the rendered email in the builder
  • View a screenshot thumbnail of the campaign on the Campaigns list
  • Send a test email to verify rendering and merge tag substitution in a real inbox
The preview and screenshot are useful for layout checks. Test emails are the only way to see what the email looks like when fully rendered in a real client (Gmail, Outlook, Apple Mail) — always test in at least one before committing to a real send.

Sending a Test Email

From the Compose or Review step, click Send test email and enter one or more recipient addresses (yourself, teammates, a QA address). The test arrives as a transactional email; tracking is disabled on tests to keep them out of campaign analytics. Tests are rate-limited to prevent accidents. Tests use sample data for merge tags rather than real recipient values — they’re for checking layout and merge tag syntax, not for confirming personalization for a specific contact.

Editing Sent Campaigns

You cannot edit a campaign that has been sent. The content is frozen at the moment the send begins. If you need to send a corrected version:
  1. Duplicate the original campaign
  2. Make your edits in the duplicate
  3. Send the duplicate to the same (or a smaller) audience
This pattern keeps the original campaign’s analytics intact and creates a clear record of the correction.

Next Steps

Audience Selection

Pick who receives the campaign

Sending & Scheduling

Send the campaign or schedule it for later

Templates

Reuse designs across campaigns

Template Language

Full merge tag syntax reference