# E-Mail-Templates
## Zweck der E-Mail-Templates
Will man eine E-Mail aus einem YForm-Formular versenden, kann man mit Hilfe eines `E-Mail-Templates` (siehe entsprechender Menüpunkt in YForm) diese E-Mail gestalten und mit Platzhaltern aus dem Formular versehen.
Über die E-Mail-Template-Verwaltung kann ein Template angelegt werden. Dabei muss zuerst ein Key erstellt werden, der die eindeutige Zuordnung zu diesem Tempalte ermöglicht. Ebenfalls muss die Absender-E-Mail, der Absender-E-Mail-Name sowie der Betreff eingegeben werden.
Danach folgen die Eingaben für den E-Mail-Body, in Plain und HTML (optional).
## Handhabung
Über die Aktion **tpl2email** kann eine E-Mail über den angebenen **Key** eines E-Mail-Templates gesendet werden. Über das Formular können z. B. die Werte der beiden Eingabefelder des Formular über das E-Mail-Template ausgeben werden.
### Beispiel-Formular im Formbuilder
text|vorname|Vorname|
text|name|Name|
text|emailadresse|E-Mail-Adresse|
validate|type|emailadresse|email|Das Feld enthält keine korrekte E-Mail-Adresse!
validate|empty|email|Das Feld enthält keine korrekte E-Mail-Adresse!
action|tpl2email|testtemplate|email
### Eingaben im E-Mail-Template
Als E-Mail-Template `Key` wird eingetragen:
testtemplate
In den E-Mail-Template `Body` kommt:
Hallo,
REX_YFORM_DATA[field="vorname"] REX_YFORM_DATA[field="name"]
In den E-Mail-Template `Body (Html)` kommt:
Hallo,
REX_YFORM_DATA[field="vorname"] REX_YFORM_DATA[field="name"]
### PHP
Es kann auch PHP-Code integriert werden, um z. B. Formular-Eingaben zu prüfen und die Ausgabe in der E-Mail individuell zu verändern.
```php
Hallo,
REX_YFORM_DATA[field="vorname"] REX_YFORM_DATA[field="name"]
```
> **Hinweis:**
> Die Action **tpl2email** kann auch mehrfach im Formular eingesetzt werden. So könnten E-Mails mit unterschiedlichen Templates versendet werden oder auch an mehrere Empfänger, z. B. Admin und Kunde.
## Beispiele
Im Regelfall werden die E-Mail-Templates zusammen mit einer passenden Action im YForm-Formular verwendet. Dies wird im Abschnitt [Actions](yform_modul_actions.md) erläutert.
E-Mail-Templates können jedoch auch von einem YForm-Formular losgelöst verwendet werden, zum Beispiel in Cronjobs, einem eigenen Addon, etc.
## Variante 1: `tpl2email` in einem yForm-PHP-Modul simulieren
Nachfolgend ein angepasster Formular-Code, um die E-Mail separat zu versenden. Dabei wird ein eigener, zusätzlicher Platzhalter definiert, der sich nicht im Formular befindet. Bitte die Kommentare beachten.
```php
setObjectparams('form_ytemplate', 'bootstrap');
$yform->setObjectparams('form_showformafterupdate', 0); // Muss 0 sein, damit if($form) funktioniert
$yform->setObjectparams('real_field_names', true);
$yform->setValueField('text', array("name","Name"));
$yform->setValueField('text', array("emailadresse","E-Mail-Adresse"));
$yform->setValidateField('type', array('emailadresse', "email","Bitte geben Sie eine gültige Emailadresse an."));
$yform->setValueField('textarea', array("message","Nachricht"));
$yform->setObjectparams('form_action',rex_article::getCurrent()->getUrl());
// Statt der Action wird die E-Mail separat versendet.
// $yform->setActionField('tpl2email', array('emailtemplate', 'emaillabel', 'email@domain.de'));
$form = $yform->getForm(); // HTML-Code des Formulars
if($form) { // Wenn das Formular nicht abgesendet wurde
echo $form; // HTML-Codes des Formulars ausgeben
} else {
// Ab hier beginnen die Vorbereitungen zum E-Mail-Versand
$yform_email_template_key = 'test'; // Key, wie im Backend unter YForm > E-Mail-Templates hinterlegt
$debug = 0;
// Array mit Platzhaltern, die im E-Mail-Template ersetzt werden.
$values = $yform->objparams['value_pool']['email'];
$values['custom'] = 'Eigener Platzhalter';
if ($yform_email_template = rex_yform_email_template::getTemplate($yform_email_template_key)) {
if ($debug) {
echo '
'; var_dump($yform_email_template); echo '
'; var_dump($yform_email_template); echo '
YForm E-Mail-Template "'.rex_escape($yform_email_template_key).'" wurde nicht gefunden.'; } } } ?> ``` Wenn die Validierung des Formulars erfolgreich ist, wird die E-Mail versendet und der selbst definierte Platzhalter steht nun ebenfalls im Template zur Verfügung. ```html REX_YFORM_DATA[field="name"] REX_YFORM_DATA[field="emailadresse"] REX_YFORM_DATA[field="custom"] ``` ## Variante 2: E-Mail-Versand zur Verwendung in Cronjobs, Addons, etc. Dieser Code basiert auf [lib/yform/action/tpl2email.php](https://github.com/yakamara/redaxo_yform/blob/master/plugins/email/lib/yform_action_tpl2email.php). ```php E-Mail-Templates hinterlegt $debug = 0; // Platzhalter, die im E-Mail-Template ersetzt werden. Dieses Array könnte bspw. auch von der Datenbank befüllt werden. $values['anrede'] = 'Herr'; $values['name'] = 'Max Mustermann'; $values['emailadresse'] = 'max@mustermann.de'; if ($yform_email_template = rex_yform_email_template::getTemplate($yform_email_template_key)) { if ($debug) { echo '
'; var_dump($yform_email_template); echo '
'; var_dump($yform_email_template); echo '
YForm E-Mail-Template "'.rex_escape($yform_email_template_key).'" wurde nicht gefunden.'; } } ?> ``` Absender, Betreff usw. werden automatisch ausgefüllt, indem die üblichen Platzhalter im E-Mail-Template verwendet werden: ```html REX_YFORM_DATA[field="name"] REX_YFORM_DATA[field="phone"] REX_YFORM_DATA[field="emailadresse"] ```