Zum Inhalt

E-Mail senden (über SMTP) aus Template

Der Service Task „E-Mail senden (über SMTP) aus Template“ versendet eine E-Mail über einen beliebigen SMTP-Server wie E-Mail senden (über SMTP). Der Unterschied: message.subject, message.html und message.text sind Handlebars-Vorlagen, die vor dem Versand mit den Daten aus contentData gefüllt werden. Beträge, Daten und Listen werden dabei mit den Handlebars-Helfern formatiert, ohne den Text im JSONata-Ausdruck zusammenzusetzen.

Technischer Name prio_sendEMailTemplateSMTP · Kategorie im Dialog „Service-Task auswählen“: E-Mail


Wann wird dieser Service verwendet?

  • Angebote mit Zahlen: Die Musterfirma GmbH schickt Hardware-Angebote mit Summe, Positionszahl und Gültigkeitsdatum; {{currency_eur …}} und {{toGermanDate …}} formatieren die Werte.
  • Serienmails aus einem Datensatz: Ein Teilnehmerdatensatz wird als contentData übergeben, die Vorlage greift mit {{teilnehmer.name}} darauf zu.
  • Gepflegte Vorlage statt Code: Die Vorlage liegt als Wert im Prozess oder in einem Datensatz und wird im Input nur referenziert.

Welcher E-Mail-Service?

Service Absender Empfänger
E-Mail senden (über SMTP) aus Template – diese Seite – und E-Mail senden (über SMTP) eigener Mailserver, jede Adresse, die der Server erlaubt beliebig
E-Mail aus Handlebars-Template (Microsoft Graph) Microsoft-365-Konto beliebig
E-Mail versenden an externe Empfänger (eigene Domain) eigene Domain, für den Account freigegeben beliebig
E-Mail aus Vorlage versenden über Pantarey (intern) benachrichtigung@pantarey.io nur Benutzer des eigenen Pantarey-Accounts

Voraussetzungen

Wie bei E-Mail senden (über SMTP): ein aus dem Internet erreichbarer SMTP-Server und die Zugangsdaten als Secrets. {{secret:NAME}} wird nur in transport.auth.user und transport.auth.pass ersetzt. In message.* wird der Platzhalter nicht aufgelöst; Handlebars würde {{secret:X}} dort als Ausdruck lesen und leer oder mit Fehler rendern.


Eingabe

transport und alle Felder von message entsprechen E-Mail senden (über SMTP). Abweichend:

Feld Typ Pflicht Bedeutung
message.subject String mit Handlebars nein Betreff-Vorlage; leer → No subject
message.html, message.text String mit Handlebars nein Inhalts-Vorlagen; fehlt beides → Text No content
contentData Objekt nein Daten für die Platzhalter. Fehlt es, bleiben alle Platzhalter leer

Die Vorlagen müssen Text sein; ein Objekt an dieser Stelle bricht mit Vorlage muss Text sein (erhalten: …) ab. Reihenfolge der Verarbeitung: erst werden unzulässige Felder entfernt, dann die Empfänger geprüft, dann rendert Handlebars, zuletzt greifen die Fallbacks für Betreff und Inhalt.

Verfügbare Helfer sind unter anderem dateTimeFormat, toGermanDate, currency_eur, numberFormat, multiply, add, round, toFixed, ifEquals, greaterThan, lessThan, replace, currentDate, addDaysToCurrentDate, month_name, year und qrCode; die vollständige Liste steht in der Handlebars-Referenz.

{
  "transport": {
    "host": "smtp.musterfirma-augsburg.de",
    "port": 587,
    "auth": { "user": "{{secret:SMTP_USER}}", "pass": "{{secret:SMTP_PASS}}" }
  },
  "message": {
    "from": "vertrieb@musterfirma-augsburg.de",
    "to": kunde.email,
    "subject": "Angebot {{angebot.nummer}} – Hardware",
    "html": "<p>Guten Tag {{kunde.ansprechpartner}},</p><p>anbei unser Angebot über {{currency_eur angebot.summe}} für {{angebot.positionen.length}} Positionen.</p><p>Gültig bis {{toGermanDate angebot.gueltigBis}}.</p>",
    "attachments": [ angebot.pdf ]
  },
  "contentData": { "kunde": kunde, "angebot": angebot }
}

Ausgabe

{
  "status": 200,
  "response": {
    "messageId": "<d4e5f6@musterfirma-augsburg.de>"
  }
}

Identisch zu E-Mail senden (über SMTP): response.messageId ist die Kennung des Servers. Das Ergebnis landet unter dem Ergebnispfad oder wird mit Ergebnis verwerfen nicht gespeichert.


Fehler und Verhalten

  • Fehlende Pflichtfelder und Fehler des SMTP-Servers brechen den Schritt ab, siehe E-Mail senden (über SMTP).
  • Fehler in der Vorlage (Syntaxfehler, nicht geschlossene {{, Vorlage kein Text) brechen ebenfalls ab.
  • Jeder Fehler wirft: Mit Fehler-Randereignis läuft der Prozess dort weiter, ohne Randereignis endet der Vorgang im Fehler mit Wiederaufsetzpunkt und Fehler-Mail an den Prozessverantwortlichen.
  • Wiederholungen: Bis zu drei Versuche bei vorübergehenden Fehlern (SMTP 450–452, Zeitüberschreitung). Eine bereits angenommene Mail kann dadurch doppelt ankommen. Fehler in der Vorlage werden nicht wiederholt.
  • Zeitgrenze: 900 Sekunden je Aufruf. Im Dry Run wird keine Mail gesendet.

Beispiel

Die Musterfirma GmbH verschickt Hardware-Angebote. In der Nachricht liegen kunde (E-Mail, Ansprechpartner) und angebot (Nummer, Summe, Positionen, gueltigBis, PDF als Datei-Objekt).

  1. Input-Ausdruck wie oben. contentData übergibt beide Objekte, die Vorlage greift mit {{kunde.ansprechpartner}} und {{angebot.summe}} darauf zu.
  2. Ergebnispfad leer lassen und Ergebnis verwerfen einschalten; die Nachricht bleibt unverändert.
  3. Ausgabe { "status": 200, "response": { "messageId": "…" } }.
  4. Nächster Schritt: Ein Timer wartet 14 Tage, danach prüft ein Datenbank-Schritt, ob das Angebot angenommen wurde.

Häufige Fragen

Der Betreff soll wörtlich {{ enthalten. Wie geht das?

Doppelte geschweifte Klammern, die kein Handlebars sein sollen, werden mit einem Backslash geschützt: \{{Beispiel}}.

Alle Platzhalter sind leer.

Dann fehlt contentData, oder die Pfade in der Vorlage passen nicht zu den Schlüsseln des Objekts. Im Process Explorer unter Aktivitäten → In/Out lässt sich prüfen, was der Schritt bekommen hat.

Wo gehören Secrets hin?

Nur in transport.auth.user und transport.auth.pass. Ein {{secret:…}} im Betreff oder Inhalt wird von Handlebars als Ausdruck gelesen und nicht ersetzt.


Nächster Schritt

Handlebars-Helfer: alle Helfer für Datum, Währung, Bedingungen und Listen in Vorlagen.