Zum Inhalt springen

Handlebars-Leitfaden

Frontmail-Vorlagen verwenden die Handlebars-Syntax im HTML-Body, in der Textversion, im Betreff und in den Empfängerfeldern. Frontmail führt Handlebars in einer isolierten, abgesicherten Umgebung aus: Es gibt nur die auf dieser Seite aufgeführten Helper, Partials sind nicht verfügbar, und jeder Wert wird maskiert.

<p>Guten Tag {{name}},</p>
<p>Ihre Buchung für den {{booking.date}} ist bestätigt.</p> {{!-- verschachteltes Objekt --}}
<p>{{default company "(ohne Firma)"}}</p> {{!-- Ersatzwert --}}

Ein fehlender Wert wird als leerer String gerendert. Für Kommentare, die nie in der E-Mail landen, verwenden Sie {{!-- … --}}.

{{#if newsletter}}
<p>Danke für Ihre Anmeldung!</p>
{{else}}
<p>Sie können sich jederzeit anmelden.</p>
{{/if}}
{{#unless paid}}<p>Die Zahlung steht noch aus.</p>{{/unless}}
{{#if (eq topic "support")}}<p>Unser Support antwortet innerhalb eines Tages.</p>{{/if}}
{{#if (and vip (gt total 1000))}}<p>🎁 Kostenloser Versand</p>{{/if}}
{{#if (or (eq country "DE") (eq country "AT"))}}<p>Versandkostenfrei</p>{{/if}}

{{#if}} behandelt false, 0, "", null, fehlende Werte und leere Listen als falsch.

Verwenden Sie einen Parameter vom Typ list mit itemFields:

<table>
{{#each items}}
<tr>
<td>{{@index}}</td>
<td>{{title}}</td>
<td>{{qty}} × {{formatMoney price ../currency}}</td>
</tr>
{{else}}
<tr><td colspan="3">Keine Artikel.</td></tr>
{{/each}}
</table>

Innerhalb von {{#each}} ist this der aktuelle Eintrag; verfügbar sind @index (ab 0), @first und @last, und mit ../ erreichen Sie den übergeordneten Kontext. {{#with customer}}…{{/with}} wechselt den Kontext, und {{lookup map key}} liest einen dynamischen Schlüssel.

Helper Beispiel Ergebnis
formatDate value [style] [timeZone=…] [locale=…] {{formatDate arrival "long"}} October 1, 2026 / 1. Oktober 2026
formatNumber value [decimals=n] {{formatNumber 1234.5 decimals=2}} 1,234.50 / 1.234,50
formatMoney amount currency [minor=true] {{formatMoney 49 "EUR"}} · {{formatMoney 4900 "EUR" minor=true}} €49.00 / 49,00 €
uppercase value {{uppercase code}} ABC123
lowercase value {{lowercase email}} anna@example.de
default value fallback… {{default nickname name "Freund"}} erster nicht leerer Wert
eq a b · ne a b {{#if (eq status "paid")}} lockere Gleichheit (1 ist gleich "1")
gt a b · lt a b {{#if (gt qty 10)}} numerischer Vergleich
and a b … · or a b … · not a {{#if (and a (not b))}} Booleans (leere Werte sind falsch)
json value {{json items}} JSON-Text (maskiert) – praktisch zum Debuggen
nl2br value {{nl2br message}} maskierter Text, Zeilenumbrüche werden zu <br>

Stile von formatDate: date, datetime, time, short, long, full, iso. Die Sprache der Ausgabe richtet sich nach der Sprache, in der die E-Mail versendet wird – der Standardsprache der Vorlage oder der gewählten Übersetzung; pro Aufruf überschreiben Sie sie mit locale="de". Zeiten verwenden die Zeitzone der Organisation, es sei denn, Sie übergeben timeZone="Europe/Berlin".

Der Aufruf jedes anderen Helpers ist ein Kompilierfehler und erscheint in den Prüfungen der Vorlage.

Variable Wert
{{frontmail.message_id}} Die ID der Nachricht, z. B. msg_01J9Z3K7Q2 – praktisch als Referenznummer.
{{frontmail.sent_at}} ISO-Zeitstempel des Renderns, z. B. 2026-09-24T10:11:05.000Z. Kombinieren Sie ihn mit formatDate.
{{frontmail.origin}} Der Origin der Browser-Anfrage (z. B. https://example.com), leer bei serverseitigem Versand.

frontmail ist reserviert – Sie können keinen Parameter mit diesem Namen definieren.

Frontmail maskiert jede Ausgabe als HTML, auch in den Formen {{{triple}}} und {{& ampersand}}. Tippt ein Besucher <a href="…">klick</a> in Ihr Formular, sieht er in der E-Mail genau diesen Text – keinen Link.

Wenn Sie wirklich Markup aus Parametern brauchen (z. B. formatierten Text aus Ihrem eigenen CMS), deklarieren Sie den Parameter mit dem Typ html. Sein Wert wird anhand einer Allowlist bereinigt:

  • Tags: a, b, strong, i, em, u, s, p, br, div, span, h1–h6, ul, ol, li, blockquote, pre, code, hr, img, table und seine Bestandteile, small, sub, sup, center, font;
  • Links: http, https, mailto, tel; Bilder: http, https, cid;
  • Inline-Styles: Farben, Schriftstärke/-stil/-größe, Zeilenhöhe, Textausrichtung/-dekoration, Margin, Padding, Breite, Höhe, max-width;
  • alles andere (Skripte, iframes, Formulare, Event-Handler, javascript:-URLs) wird entfernt.

Geben Sie ihn mit einfachem {{body_html}} aus – der bereinigte Wert wird als Markup ausgegeben.

Die automatisch erzeugte Textversion entsteht aus dem gerenderten HTML (Links werden zu Text (URL), Tabellen zu Zeilen). Bearbeiten Sie die Textversion selbst, wird sie nach denselben Handlebars-Regeln gerendert, allerdings ohne HTML-Maskierung.