Erstellen von E-Mail-Templates mit der SendinBlue-Templatesprache [NEU]

Beim Codieren von HTML-E-Mail-Templates zur Verwendung auf der SendinBlue-Plattform können Sie unsere Templatesprache nutzen, um erweiterte Funktionen zu Ihren Transaktions- oder Automation-E-Mails hinzuzufügen.

Die Templatesprache bietet eine standardisierte, gemeinsame Struktur für effizientere Templates und leistungsstärkere Design-Optionen.

Vorbereitung

Gut zu wissen: Erstellen und speichern Sie Ihr Template im Bereich Meine SMTP-Templates. Templates, die diese Templatesprache verwenden, können in SendinBlue über das Modul SMTP API v3 für den Versand ausgelöst werden, durch einen Aufruf an v3/smtp/email und die Angabe der templateid, oder über das SMTP Relay mit Angabe der Kopfzeile X-SIB-API und den richtigen Parametern. Sie sind zurzeit nicht mit der SendinBlue-Automation- oder Kampagnen-Plattform für den Versand von Massen-E-Mails kompatibel, diese Funktion wird jedoch demnächst verfügbar sein.

Wenn Sie unsere Transaktions- (SMTP) Plattform noch nicht verwendet haben, müssen Sie möglicherweise ihre Aktivierung anfordern. Loggen Sie sich in Ihr Konto ein und rufen Sie diese Seite auf. Wenn Sie keine Aufforderung zur Aktivierung Ihres SMTP-Kontos sehen und Ihre Quote höher ist als 0, sind Sie startklar für den Versand.

Übersicht

Die Templatesprache verwendet Tags, um die Logik des Templates zu kontrollieren, sowie Variablen und Filter, die bei der Auslösung des Versands durch Werte ersetzt werden.

Es stehen zwei Arten von Begrenzern zur Verfügung: {% ... %} und {{ ... }}. Der erste wird für die Ausführung von Statement-Tags wie For-Schleifen verwendet. Die zweite "erfasst" oder integriert das Ergebnis einer Variable oder eines Filters in das Template.

Gut zu wissen:Mit der Templatesprache können Sie mehrere Aspekte Ihrer E-Mail ändern, einschließlich der Betreffzeile, des Preheaders, HTML-<body> Tags und des Empfängerfelds "an". HTML-Inhalt wird in Templates automatisch escaped, dies kann jedoch mit dem weiter unten beschriebenen Tag autoescape geändert werden.

Tags

Die am häufigsten in Templates verwendeten Tags sind for, if und autoescape. Richtlinien und Beispiele sind nachstehend aufgeführt.

for

Wie wir später in diesem Tutorial sehen werden, ist for in Kombination mit Ihren Transaktionsparametern besonders leistungsstark. Es vereinfacht Ihnen komplexe Aufgaben wie das Einfügen von dynamischen Produktlisten.

Das Tag {% for %} ermöglicht es Ihnen, die Schleife über jeden Wert einer Sequenz zu spannen oder darüber zu iterieren. Dies ist besonders hilfreich, wenn die Zahl der Elemente in der Sequenz beim Erstellen eines Templates unbekannt ist.

Hier sind mehrere geläufige Anwendungsbeispiele für for:

for, in

zeigt eine Liste an

<ul>
{% for user in params.USERS %}
<li>{{ user.username }}</li>
{% endfor %}
</ul>

else

zeigt einen Ersatz-Block an, wenn die Sequenz leer ist

<ul>
{% for user in params.USERS %}
<li>{{ user.username }}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
</ul>

Würde „kein Benutzer gefunden“ anzeigen.

reversed

kehrt die Eingabereihenfolge in Ihrer Sequenz um

{% for country in params.countries reversed %} {% end for %}

Würde eine Liste von Ländern anzeigen, jedoch in umgekehrter Reihenfolge im Vergleich zur Originalliste.

 

Loop-Variablen

In einem For-Schleifen-Block können Sie außerdem diese speziellen Variablen verwenden:

forloop.Counter

Entspricht immer einer Ganzzahl, um die Zahl der Einträge in der Schleife anzugeben. Die Zählung beginnt bei 1, nach dem ersten Eintrag in der Schleife entspricht forloop.Counter 1.

forloop.Counter0

Die aktuelle Iteration der Schleife. (beginnt bei 0)

forloop.Revcounter

Immer auf eine Ganzzahl eingestellt, um die in der Schleife verbleibenden Elemente anzugeben. Nach dem ersten Eintrag in der Schleife entspricht forloop.Revcounter der Gesamtzahl der Elemente in der durchlaufenen Sequenz. Nach dem letzten Eintrag in der Schleife entspricht forloop.revcounter 1.

forloop.Revcounter0

Die Zahl der Iterationen bis zum Ende der Schleife (beginnt bei 0)

forloop.First

Die Boolesche Variable zeigt True an, wenn dies der erste Durchlauf durch die Schleife ist. Die ist besonders praktisch, um auf das erste Element in einer Liste ein Sonderformat anzuwenden.

forloop.Last

Die Boolesche Variable zeigt True an, wenn dies der letzte Durchlauf durch die Schleife ist. In einer Liste von Elementen wird häufig ein Trennzeichen (wie , oder |) verwendet.

forloop.Parentloop

Referenziert das Objekt forloop mit der übergeordneten Schleife, im Falle von geschachtelten Schleifen. Hier ein Beispiel:

{% for country in countries %}
<table>
{% for city in country.city_list %}
<tr>
<td>Country #{{ forloop.Parentloop.counter }}</td>
<td>City #{{ forloop.Counter }}</td>
<td>{{ city }}</td>
</tr>
{% endfor %}
</table>
{% endfor %}

 

Gut zu wissen: Bei Namen von Schleifen-Variablen muss die Groß- und Kleinschreibung beachtet werden.

Beispiel: Um jedem Element Ihrer Iteration einen numerischen Wert (ab 1) zuzuweisen, verwenden Sie {{ forloop.Counter }}:

{% for user in users %}
{{ forloop.Counter }} - {{ user.username }}
{% endfor %}

if

Die leistungsstarke Logik von if ermöglicht es Ihnen, ganze Inhaltsblöcke zu Ihrem Template hinzuzufügen oder daraus zu entfernen (oder Inhalte in einem Block zu ändern). So können Sie ein Template für mehrere Szenarien verwenden und effizienter arbeiten.

Mit dem Tag {% if %} können Sie testen, ob ein Ausdruck wahr (oder ein Datenfeld leer) ist, und den E-Mail-Inhalt basierend auf dem Ergebnis ändern. Sie können außerdem nach falschen Werten, mehreren Bedingungen und mehreren Zweigen suchen.

Hier finden Sie ein paar häufige Anwendungsbeispiele für if:

if

überprüft, ob ein Wert wahr oder falsch oder ein Datenfeld leer ist

{% if contact.SUBSCRIBED %}
<b>Thank you for your support!</b>
{% endif %}

 

{% if params.users %}
<ul>
{% for user in params.users %}
<li>{{ user.username }}</li>
{% endfor %}
</ul>
{% endif %}

==

überprüft, ob ein Ausdruck wahr ist

{% if coupon == "WELCOME" %}
<p>Welcome to our list! Here’s your first coupon: WELCOME25</p>
{% endif %}

if, in

überprüft, ob ein Wert (Teilstring) in einem String oder ob eine Variable in einem Datenfeld vorhanden ist

{% if "@example.com" in "bob@example.com" %}
Wird angezeigt, weil "@example.com" ein Teilstring ist von "bob@example.com"
{% endif %}


 

{% if "Piano" in params.types %}
Be careful! There are heavy items in your order. You must be present to receive this delivery.
{% endif %}

not

überprüft auf falsche Werte

{% if not user.subscribed %}
<p>You are not subscribed to our secret sale alerts. Sign up here.</p>
{% endif %}

and / or

bewertet mehrere Bedingungen

{% if temperature > 10 and temperature < 55 %}
<p>Brr. It’s cold! Here’s a coupon for 20% off of any hot beverage, today only.</p>
{% endif %}

 

{% if contact.LANG == “FR” and contact.COUNTRY == “Canada” %}
{% endif %}

 

{% if contact.COUNTRY == “United States” or contact.COUNTRY == “Canada” %}
{% endif %}

elif, else

bewertet mehrere Zweige

{% if event.paid %}
Your spot is reserved. Thanks for submitting your payment.
{% elif event.registered %}
Your spot is reserved but will be released without payment by January 2.
{% else %}
There’s still time to sign up! Click here.
{% endif %}

 

autoescape

Gut zu wissen: Standardmäßig escaped SendinBlue den HTML- (und JS) Inhalt aller Variablen. Das bedeutet, dass in einer Variable enthaltene HTML-Inhalte escaped und als Text erfasst werden. Lautet der Inhalt Ihrer Variable beispielsweise <h1>My title</h1>, wird Ihr Template genau diesen Text in der E-Mail anzeigen: <h1>My title</h1>, anstatt den Text "My title" als H1-Überschrift wiederzugeben.

Das Tag autoescape kontrolliert das aktuelle Auto-Escape-Verhalten. Da SendinBlue-Templates HTML-Inhalte standardmäßig automatisch escapen, müssen Sie dieses Tag in der Regel anwenden, um Auto-Escape in einem bestimmten Block zu deaktivieren. Der Block muss mit dem Endtag endautoescape abschließen.

Sehen wir uns ein geläufiges Beispiel an, in dem die Deaktivierung von autoescape nützlich sein kann. Nehmen wir an, dass Sie Produkte in einer Variablen gruppieren, jedes Produkt aber eine individuelle Formatierung benötigt.

Wenn autoescape wie folgt verwendet wird:

{% autoescape off %}{{ params.my_html }}{% endautoescape %}

wird Auto-Escape für die Variable {{ params.my_html }} deaktiviert. Wenn der Inhalt Ihrer Variable  <h1>My title</h1> ist, wird er als H1-Überschrift angezeigt.

Die einzigen Ausnahmen sind Variablen, für die das Escapen bereits deaktiviert wurde, entweder durch den Code, der die Variable definiert, oder durch die Anwendung des Filters Safe.

Variablen

Es stehen drei Arten von Variablen zur Verfügung, die nachstehend beschrieben werden.

Gut zu wissen: Wenn Sie die Funktion "Einen Test senden" nutzen, um eine Testversion Ihres E-Mail-Templates zu versenden, werden die Variablen in der Test-E-Mail nicht durch empfängerspezifische Inhalte ersetzt, sondern genau so angezeigt, wie sie in Ihrem Template codiert wurden.

1. Vordefinierte Variablen

Sie stehen für alle SendinBlue-Nutzer zur Verfügung:

{{ mirror }}

fügt einen Link ein, um Ihre E-Mail als Webseite anzuzeigen

Diese Variable ist nicht obligatorisch.

Sie wird normalerweise am Anfang einer E-Mail platziert:

<a href={{ mirror }}>Click here to view this message in your browser.</a>

{{ unsubscribe }}

fügt einen Link ein, um sich von all Ihren E-Mails abzumelden

Alle über SendinBlue versandten Nicht-Transaktions-E-Mails sollten einen Abmeldelink enthalten.

Wird in der Regel in der Fußzeile platziert und wie ein Link formatiert:

<a href={{ unsubscribe }}>Click here to unsubscribe.</a>

 

2. Kontaktattribute

Dieser Variablentyp besteht aus zwei Elementen und ist wie folgt aufgebaut:

{{ contact.attributeNAME }}

Attribute = Name des SendinBlue-Kontaktattributs wie auf Ihrer Kontakte-Seite in SendinBlue angezeigt. Attribute sind immer GROSSGESCHRIEBEN und enthalten nie Leerzeichen.

Beispiel: Um an der Stelle PHONE des Attributs die Telefonnummer eines Kontakts einzufügen, verwenden Sie {{ contact.PHONE }}

Wenn das Kontaktattribut einen Bindestrich enthält (-), zum Beispiel CELL-PHONE, formatieren Sie Ihre Variable stattdessen so: {{ contact|key:"ATTRIBUTE" }}.

Beispiel: {{ contact|key:"CELL-PHONE" }}

3. Transaktionsparameter

Transaktionsparameter-Variablen bestehen ebenfalls aus zwei Elementen und sind wie folgt aufgebaut:

{{ params.parameterNAME }}

parameterNAME = der Name Ihres Transaktionsparameters, mit demselben Format und derselben Gross- bzw. Kleinschreibung wie in der API

Beispiel: Um an der Stelle PRODUCTS eine Liste von Produkten einzufügen, verwenden Sie: {{ params.PRODUCTS }}.

Sehen wir uns jetzt eine häufiges Anwendungsbeispiel an: das Generieren einer Liste der von einem Kunden gekauften Produkte. Da die Zahl der gekauften Produkte je nach Kunde variiert, können wir eine For-Schleife mit Ihrem PRODUCTS-Transaktionsparameter kombinieren, wie in diesem Beispiel:

<ul> 
{% for product in params.products %}

<li><strong>{{ product.NAME }}</strong> - {{ product.PRICE }}</li>
{% endfor %}
</ul>

Das Ergebnis wäre eine ungeordnete Liste mit einer Aufzählung der Produkte einschließlich Produktname und Preis (siehe unten), und die Liste jedes Empfängers könnte eine einmalige Anzahl von Produkten enthalten:

  • Produkt 1 - $10
  • Produkt 2 - $10
  • Produkt 3 - $10

Gut zu wissen: Wir empfehlen, keine Bindestriche oder Sonderzeichen in den Namen Ihrer Variablen/Parameter zu verwenden. Wenn Sie keine andere Wahl haben, können Sie {{ params|key:”parameter-NAME” }} verwenden. Möglicherweise müssen Sie den Filter mehrfach verschachteln, wie hier: {{ params|key:”my-product”|key:”my-product-name” }}.

Datenfelder

Bei der Verwendung eines Datenfelds können Sie auf alle einzelnen Elemente zugreifen. Geben Sie Ihre ID wie folgt an: params.parameterARRAY.ID.parameterNAME. Beispiel: {{ params.PRODUCTS.1.NAME }}.

Filter

Variablen können durch Filter geändert werden. Filter sind durch einen vertikalen Strich von der Variable getrennt (|) und können optionale Argumente in Klammern enthalten. Mehrere Filter können verkettet werden. Das Ergebnis eines Filters wird auf den nächsten angewendet.

Die häufigsten Filter

Ändern und Formatieren von Groß- und Kleinschreibung

capfirst

schreibt einen Wert groß

Der erste Buchstabe wird großgeschrieben, alle anderen klein.

{{ contact.NAME|capfirst }}

john doe wird zu John doe.

title

generiert eine Anrede-Version des Werts

Wörter beginnen mit Großbuchstaben, alle anderen Buchstaben werden kleingeschrieben.

{{ contact.NAME|title }}

john doe wird zu John Doe.

upper

wandelt einen Wert in Großbuchstaben um

{{ contact.NAME|upper }}

john doe wird zu JOHN DOE.

lower

wandelt einen Wert in Kleinschreibung um

{{ contact.NAME|lower }}

JOHN DOE wird zu john doe.

trunchars

Schneidet einen String ab, wenn er die angegebene Zeichenzahl überschreitet. Abgeschnittene Strings enden mit einer übersetzbaren Ellipse (…).

{{ value|truncatechars:9 }}

Wenn "value" = Glückwunsch, würde er wiedergegeben als Glückwuns…

Formatieren von Zahlen

floatformat

rundet eine Zahl mit der allgemeinen Logik auf die vorgegebene Größe

{{ 42.55|floatformat:0 }}

Wird als 43 angezeigt

{{ 42.55|floatformat:1 }}

Wird als 42.5 angezeigt

Formatieren von Daten

time_parse

konvertiert Ihr Datenformat (als String) in ein Standarddatenformat, das mit anderen Filtern verwendet werden kann

Verwenden Sie Ihr aktuelles Datumsformat als Argument: Formatieren Sie das genaue Datum/die genaue Uhrzeit von Monday January 2 15:04:05 -0700 MST 2006 in dem Format, das angezeigt würde, wenn dieser Wert verwendet würde.

Wenn Ihr String das Format RFC3339 hat, können Sie den Parser time_parse_rfc3339 ohne Argument verwenden.

{{ params.my_date|time_parse:"15:04 02/01/2006” }}

{ params.my_date|time_parse:"Monday 02 January 2006” }}

Hinweis: Für Tage und Monate werden nur englische Wörter erkannt.

date

erfasst das Datum im angegebenen Format
Um Ihr eigenes Format zu definieren, notieren Sie, wie die Referenzzeit Mon Jan 2 15:04:05 -0700 MST 2006 in Ihrem Format aussehen würde.

Bitte beachten Sie, dass Sie ein Datum zu diesem Filter hinzufügen müssen.

Sie erhalten ein Datum aus einem String, der den time_parse-Filter verwendet.

{{ "14:01 01/06/2018"|time_parse:"15:04 02/01/2006"|date:"Mon Jan 2 15:04:05 2006"}}

Wird zu:

Fri Jun 1 14:01:00 2018

Hinweis: Für Tage und Monate werden nur englische Wörter erkannt.

 

Bitte beachten Sie Folgendes:

  • Abkürzungen von Tagen und Monaten und ausgeschriebene Namen werden nur in Englisch unterstützt.
  • Wenn kein Wert angegeben wird, wird er als 0 betrachtet.
  • Sofern nicht anders angegeben, ist die Standard-Zeitzone UTC.
  • Sie können die Schlüsselwörter am/pm verwenden.
  • Am häufigsten werden Zeitzonen definiert mit: den spezifischen Schlüsselwörtern (MST, CET, UTC, Asian/Kolkata usw.) oder numerisch +0100 oder -0100 in Bezug auf UTC.

Weitere Filter

first

gibt das erste "Element" einer Sequenz, eines Mappings oder eines Strings zurück

{{ [1, 2, 3, 4]|first }}

Wird angezeigt als 1

join

gibt einen String zurück, der aus der Verkettung der Elemente einer Sequenz besteht

Das Trennzeichen zwischen Elementen ist standardmäßig ein leerer String. Sie können mithilfe des optionalen ersten Parameters ein anderes Trennzeichen definieren.

{{ [1, 2, 3]|join }}

Wird angezeigt als 123


{{ [1, 2, 3]|join('|') }}

Wird angezeigt als 1|2|3

last

gibt das letzte "Element" einer Sequenz, eines Mapping oder eines Strings zurück

{{ [1, 2, 3, 4]|last }}

Wird angezeigt als 4

length

gibt die Zahl der Elemente einer Sequenz oder eines Mappings zurück, oder die Länge eines Strings

{% if users|length > 10 %}
...
{% endif %}

slice

extrahiert bestimmte Elemente aus einer Sequenz, einem Mapping oder einem String

{% for i in [1, 2, 3, 4, 5]|slice(1, 2) %}
{% endfor %}

Wird über 2 und 3 iteriert

{{ '12345'|slice(1, 2) }}
Wird angezeigt als 23

Weitere Dokumentation

Die von SendinBlue verwendete Templatesprache basiert auf der Templatesprache Django.

In diesem Tutorial werden die relevantesten Elemente sowie die am häufigsten benutzte Templatesprachstruktur behandelt. Nachstehend finden Sie eine umfassende Liste der unterstützten Tags und Filter. In diesen Ressourcen zu Django finden Sie weitere Details.

Alle unterstützten Tags

autoescape, comment, cycle, filter, firstof, for, if, ifchanged, now, set, spaceless, templatetag, with

Alle unterstützten Filter

escape, safe, escapejs, add, addslashes, capfirst, center, cut, date, default, default_if_none, divisibleby, first, floatformat, get_digit, iriencode, join, last, length, length_is, linebreaks, linebreaksbr, linenumbers, ljust, lower, make_list, phone2numeric, pluralize, random, removetags, rjust, slice, stringformat, striptags, time, title, truncatechars, truncatechars_html, truncatewords, truncatewords_html, upper, urlencode, urlize, urlizetrunc, wordcount, wordwrap, yesno

Hinweis: Wenn Sie ein nützliches Element identifizieren, das noch nicht unterstützt wird, wenden Sie sich bitte an unseren Kundendienst unter contact@sendinblue.com.