Guide Handlebars
Les modèles Frontmail utilisent la syntaxe Handlebars dans le corps HTML, la version texte, l’objet et les champs de destinataires. Frontmail exécute Handlebars dans un environnement isolé et verrouillé : seuls les helpers listés sur cette page existent, les partials ne sont pas disponibles et chaque valeur est échappée.
Variables
Section intitulée « Variables »<p>Bonjour {{name}},</p><p>Votre réservation du {{booking.date}} est confirmée.</p> {{!-- objet imbriqué --}}<p>{{default company "(sans entreprise)"}}</p> {{!-- valeur de repli --}}Une valeur manquante est rendue comme une chaîne vide. Utilisez {{!-- … --}} pour les
commentaires qui ne doivent jamais apparaître dans l’e-mail.
Conditions
Section intitulée « Conditions »{{#if newsletter}} <p>Merci pour votre inscription !</p>{{else}} <p>Vous pouvez vous inscrire à tout moment.</p>{{/if}}
{{#unless paid}}<p>Le paiement est en attente.</p>{{/unless}}
{{#if (eq topic "support")}}<p>Notre support vous répondra sous un jour.</p>{{/if}}{{#if (and vip (gt total 1000))}}<p>🎁 Livraison offerte</p>{{/if}}{{#if (or (eq country "FR") (eq country "BE"))}}<p>Livraison gratuite</p>{{/if}}{{#if}} considère comme faux false, 0, "", null, les valeurs manquantes et les listes
vides.
Utilisez un paramètre list avec itemFields :
<table> {{#each items}} <tr> <td>{{@index}}</td> <td>{{title}}</td> <td>{{qty}} × {{formatMoney price ../currency}}</td> </tr> {{else}} <tr><td colspan="3">Aucun article.</td></tr> {{/each}}</table>À l’intérieur de {{#each}}, this est l’élément courant, @index (à partir de 0), @first et
@last sont disponibles, et ../ permet d’accéder au contexte parent. {{#with customer}}…{{/with}}
change de contexte et {{lookup map key}} lit une clé dynamique.
| Helper | Exemple | Résultat |
|---|---|---|
formatDate value [style] [timeZone=…] [locale=…] |
{{formatDate arrival "long"}} |
October 1, 2026 / 1 octobre 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}} |
claire@example.fr |
default value fallback… |
{{default nickname name "ami"}} |
première valeur non vide |
eq a b · ne a b |
{{#if (eq status "paid")}} |
égalité souple (1 est égal à "1") |
gt a b · lt a b |
{{#if (gt qty 10)}} |
comparaison numérique |
and a b … · or a b … · not a |
{{#if (and a (not b))}} |
booléens (les valeurs vides sont fausses) |
json value |
{{json items}} |
texte JSON (échappé) – pratique pour le débogage |
nl2br value |
{{nl2br message}} |
texte échappé dont les retours à la ligne deviennent des <br> |
Styles de formatDate : date, datetime, time, short, long, full, iso. La langue de
sortie suit la langue dans laquelle l’e-mail est envoyé – la langue par défaut du modèle ou la
traduction choisie ; remplacez-la ponctuellement avec locale="fr".
Les heures utilisent le fuseau horaire de l’organisation, sauf si vous passez
timeZone="Europe/Paris".
L’appel de tout autre helper est une erreur de compilation, affichée dans les vérifications du modèle.
Variables système
Section intitulée « Variables système »| Variable | Valeur |
|---|---|
{{frontmail.message_id}} |
L’identifiant du message, p. ex. msg_01J9Z3K7Q2 – utile comme numéro de référence. |
{{frontmail.sent_at}} |
Horodatage ISO du rendu, p. ex. 2026-09-24T10:11:05.000Z. À combiner avec formatDate. |
{{frontmail.origin}} |
L’Origin de la requête du navigateur (p. ex. https://example.com), vide pour les envois côté serveur. |
frontmail est réservé – vous ne pouvez pas définir de paramètre portant ce nom.
Échappement et type html
Section intitulée « Échappement et type html »Frontmail échappe en HTML chaque sortie, y compris les formes {{{triple}}} et
{{& ampersand}}. Un visiteur qui saisit <a href="…">click</a> dans votre formulaire verra
exactement ce texte dans l’e-mail, et non un lien.
Lorsque vous avez réellement besoin de balisage provenant des paramètres (par exemple du texte
enrichi issu de votre propre CMS), déclarez le paramètre avec le type html. Sa valeur est
assainie selon une liste blanche :
- balises :
a,b,strong,i,em,u,s,p,br,div,span,h1–h6,ul,ol,li,blockquote,pre,code,hr,img,tableet ses éléments,small,sub,sup,center,font; - liens :
http,https,mailto,tel; images :http,https,cid; - styles en ligne : couleurs, graisse/style/taille de police, interligne, alignement/décoration du texte, margin, padding, width, height, max-width ;
- tout le reste (scripts, iframes, formulaires, gestionnaires d’événements, URL
javascript:) est supprimé.
Affichez-le avec un simple {{body_html}} – la valeur assainie est rendue comme du balisage.
Version texte
Section intitulée « Version texte »La version texte générée automatiquement est produite à partir du HTML rendu (les liens deviennent
texte (url), les tableaux deviennent des lignes). Si vous modifiez la version texte à la main,
elle est rendue avec les mêmes règles Handlebars, mais sans échappement HTML.