Formulare bauen, deren Mails auch ankommen
Das Zusammenstellen im Editor ist schnell erledigt. Die Zeit geht danach drauf, wenn Bestätigungen im Spam landen, Uploads offen im Netz liegen und niemand sagen kann, wie lange die Daten bleiben.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Das Formular steht, die Nachricht kommt trotzdem nicht an
Der häufigste Fehler ist auf den ersten Blick logisch: Als Absender der Benachrichtigung wird die Adresse der Person eingetragen, die das Formular ausgefüllt hat. Damit verschickt euer Server Mails im Namen einer fremden Domain. Deren Absenderprüfung erlaubt das nicht, und je nach Empfänger landet die Nachricht im Spam oder wird gleich abgewiesen. Richtig ist eine Absenderadresse auf einer Domain, für die euer Server senden darf, und die Adresse der absendenden Person als Antwortadresse.
Unangenehm daran ist, dass niemand es merkt. Die Bestätigungsseite erscheint, das Formular wirkt also einwandfrei. Fehlende Anfragen fallen nicht auf, weil man nicht vermisst, was man nie gesehen hat. Auffällig wird es erst, wenn jemand nachfragt, warum auf sein Anliegen niemand geantwortet hat.
Die zweite Baustelle ist alles, was nach dem Absenden mit den Daten passiert. Hochgeladene Dateien landen in einer Ablage, die je nach Einstellung öffentlich erreichbar ist, wer die Adresse kennt, kommt heran. Und wenn die Eingaben zusätzlich gespeichert werden, wachsen sie ohne eingebaute Löschroutine unbegrenzt weiter, obwohl personenbezogene Daten nur so lange gespeichert werden dürfen, wie es der Zweck erfordert.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Vom leeren Formular bis zur ankommenden Nachricht
Die ersten fünf Schritte finden im Backend statt, die letzten beiden außerhalb. Genau deshalb bleiben sie in vielen Projekten liegen, obwohl dort der eigentliche Ärger entsteht.
- 1
Formular anlegen
Im Backend-Modul für Formulare legst du ein neues Formular an und gibst ihm einen Namen, der auch in einem Jahr noch sagt, worum es geht. Die Definition wird als YAML-Datei in der Dateiablage gespeichert, nicht als Datensatz in der Datenbank. Wer mehrere Umgebungen betreibt, sollte deshalb früh klären, wie diese Dateien zwischen Test und Live wandern.
Geschafft, wenn: Das Formular steht in der Liste des Moduls und lässt sich dort jederzeit wieder öffnen.
- 2
Felder und Formularseiten zusammenstellen
Der Editor bietet die üblichen Feldarten an, dazu Auswahl- und Ankreuzfelder sowie Dateiuploads. Lange Formulare lassen sich auf mehrere Formularseiten verteilen, was ein langes Formular übersichtlicher macht, den Weg bis zum Absenden aber auch verlängert. Die härtere Frage ist ohnehin, welches Feld weg kann, denn jedes zusätzliche Pflichtfeld kostet Anfragen.
Geschafft, wenn: Die Vorschau im Editor zeigt genau die Felder, die später auf der Seite stehen.
- 3
Pflichtfelder und Prüfregeln setzen
Je Feld lassen sich Prüfungen hinterlegen, etwa auf eine nicht leere Eingabe, eine gültige Mailadresse, eine Mindest- und Höchstlänge, einen Zahlenbereich oder ein eigenes Muster. Zu jeder Prüfung gehört eine Meldung, die sagt, was zu tun ist. Eine Meldung, die nur mitteilt, dass die Eingabe ungültig sei, erzeugt Abbrüche statt Korrekturen.
Geschafft, wenn: Ein absichtlich falsch ausgefülltes Testformular kommt mit einer verständlichen Meldung zurück, statt die Eingabe durchzulassen.
- 4
Bestätigung und Abschlussaktionen festlegen
Hier entscheidest du, was nach dem Absenden geschieht. Üblich sind eine Benachrichtigung an das zuständige Postfach, eine Bestätigung an die absendende Person und entweder eine Bestätigungsmeldung oder eine Weiterleitung auf eine Dankeseite. Das Speichern in der Datenbank ist eine eigene Aktion und keine Voreinstellung, also eine bewusste Entscheidung mit Folgen für die Aufbewahrung.
Geschafft, wenn: Ein Testdurchlauf löst genau die Aktionen aus, die du eingetragen hast, und in dieser Reihenfolge.
- 5
Formular auf einer Seite einbinden
Eingebunden wird es über ein eigenes Inhaltselement, in dem du die Formulardefinition auswählst. Dort lassen sich einzelne Einstellungen der Abschlussaktionen überschreiben, etwa das Empfängerpostfach. Damit kann dasselbe Formular an zwei Stellen stehen und trotzdem an unterschiedliche Abteilungen gehen.
Geschafft, wenn: Die Seite zeigt das Formular, und ein Testabsenden landet auf der vorgesehenen Bestätigung.
- 6
Den Versand belastbar machen
Die Mail-Einstellungen der Installation stehen unter config/system in der Datei settings.php, üblicherweise mit einem eigenen Postausgangsserver statt der lokalen Zustellung. Der Absender gehört auf eine eigene Domain, die Adresse aus dem Formular in das Antwortfeld. Dazu kommen die Einträge im Namenssystem, mit denen ein Empfänger prüft, ob euer Server für diese Domain senden darf.
Geschafft, wenn: Eine Testanfrage kommt in einem externen Postfach an und liegt dort im Posteingang, nicht im Spam-Ordner.
- 7
Datenschutz klären, bevor das Formular online geht
Für jedes Feld sollte in einem Satz sagbar sein, wozu es gebraucht wird. Dazu kommen ein Hinweis auf die Datenschutzerklärung, gegebenenfalls eine ausdrückliche Einwilligung als eigenes Ankreuzfeld, ein Zielverzeichnis für Uploads außerhalb des öffentlich erreichbaren Bereichs und eine Festlegung, wer gespeicherte Eingaben wann löscht.
Geschafft, wenn: Neben dem Formular steht ein Satz zum Zweck der Daten mit Verweis auf die Datenschutzerklärung, das Uploadverzeichnis liegt nachweislich außerhalb des öffentlich erreichbaren Bereichs, und im Verarbeitungsverzeichnis steht mit Name und Frist, wer die Einträge löscht.
Sechs Stationen zwischen Absenden und Postfach
- 01 Die Eingaben werden gegen die gesetzten Prüfregeln geprüft.
- 02 Fällt eine Prüfung durch, kommt das Formular mit einer Meldung zurück.
- 03 Danach laufen die Abschlussaktionen in der eingetragenen Reihenfolge ab.
- 04 Der Versand nimmt die Absenderadresse aus der Systemkonfiguration.
- 05 Der empfangende Server prüft die Absenderfreigabe, bevor er zustellt.
- 06 Erst danach sieht die Redaktion die Anfrage im Postfach.
Was du nach dem Aufbau belegen kannst
Ein Formular ist erst fertig, wenn drei Fragen beantwortet sind: Kommt die Nachricht zuverlässig an, sind die Eingaben unterwegs und danach geschützt, und wann verschwinden sie wieder. Der Editor löst davon genau eine, den Rest legst du daneben fest.
Felder und Prüfregeln bewusst setzen
Jedes Feld braucht einen Grund. Prüfregeln machen aus einer Eingabe eine brauchbare Angabe, also Pflichtfeld, gültige Mailadresse, Mindest- und Höchstlänge oder ein Zahlenbereich. Ein Fehler ist im Formular billiger als in der Nachbearbeitung.
Abschlussaktionen sauber trennen
Die Systemextension bringt Aktionen für die Bestätigung an die absendende Person, die Benachrichtigung an das Postfach im Haus, die Weiterleitung, eine Bestätigungsmeldung, das Speichern in der Datenbank und das Löschen der Uploads mit. Sie laufen in der Reihenfolge ab, in der sie eingetragen sind.
Absender und Antwortadresse richtig belegen
Absender ist immer eine Adresse auf einer eigenen Domain. Die Adresse aus dem Formular gehört in das Antwortfeld. Damit funktioniert die Antwort per Klick, ohne dass die Absenderprüfung des Empfängers anschlägt.
Spam dämpfen, ohne Zusatzdienst
Das Formular-Framework kennt ein Honeypot-Element, ein für Menschen unsichtbares Feld, dessen Ausfüllen den Versand abbricht. Das hält einfache Bots ab. Gegen gezielte Einträge hilft es nicht, dafür braucht es einen zusätzlichen Prüfdienst und dann auch dessen datenschutzrechtliche Bewertung.
Uploads nicht im öffentlichen Bereich ablegen
Eine Datei in einer öffentlich erreichbaren Ablage ist über ihre Adresse abrufbar, auch ohne Anmeldung. Für Bewerbungen und Ähnliches gehört das Zielverzeichnis daher in einen geschützten Bereich, und die Aktion zum Löschen der Uploads gehört ans Ende der Kette.
Aufbewahrung vorher festlegen
Speicherbegrenzung ist keine Empfehlung, sondern ein Grundsatz der Datenschutz-Grundverordnung. Wer Eingaben in der Datenbank ablegt, braucht eine Antwort darauf, wer sie wann löscht, und zwar bevor das Formular online geht.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Was das mitgelieferte Formular-Framework kann
Die Systemextension form ist Teil des Cores, es braucht also keine zusätzliche Erweiterung für ein Kontaktformular. Bedient wird sie über ein eigenes Backend-Modul mit einem Editor, in dem Felder per Auswahl hinzukommen und sich sortieren lassen. Für die Redaktion ist das der entscheidende Punkt: Ein neues Feld ist keine Aufgabe für die Umsetzung mehr.
Die Formulardefinition wird als YAML-Datei in der Dateiablage gespeichert. Das hat einen angenehmen Nebeneffekt, weil sich Formulare damit versionieren und zwischen Umgebungen kopieren lassen, und einen unangenehmen, weil eine im Live-System gebaute Definition nicht automatisch in der Testumgebung existiert. Wer beides betreibt, sollte den Weg dafür einmal festlegen.
Die Grenze des Werkzeugs liegt dort, wo eine Anfrage nicht nur ankommen, sondern weiterverarbeitet werden soll, etwa in einem Kundensystem. Dafür gibt es die Möglichkeit, eigene Abschlussaktionen in PHP zu ergänzen. Das ist Umsetzerarbeit und keine Redaktionsaufgabe, gehört aber in die Planung, bevor jemand anfängt, Mails von Hand abzutippen.
Abschlussaktionen sind der eigentliche Kern
Alles, was nach dem Absenden passiert, steckt in den Abschlussaktionen. Mitgeliefert werden unter anderem die Bestätigung an die absendende Person, die Benachrichtigung an ein Postfach, die Weiterleitung auf eine andere Seite, eine Bestätigungsmeldung, das Speichern in einer Datenbanktabelle und das Löschen hochgeladener Dateien.
Die Reihenfolge zählt. Eine Weiterleitung beendet den Ablauf, alles danach passiert nicht mehr. Und das Löschen der Uploads gehört ans Ende, sonst fehlt der Anhang in der Benachrichtigung. Diese beiden Punkte erklären einen großen Teil der Fälle, in denen ein Formular scheinbar willkürlich mal funktioniert und mal nicht.
Ein zweiter Punkt zur Reihenfolge: Wenn beide Mails verschickt werden, sollte die Benachrichtigung an das eigene Postfach vor der Bestätigung an die absendende Person stehen. Bricht der Versand ab, ist dann wenigstens die Anfrage im Haus, statt dass jemand eine Bestätigung für etwas bekommt, das nie angekommen ist.
Warum Bestätigungsmails im Spam landen
Empfangende Server prüfen, ob der sendende Server für die Absenderdomain überhaupt senden darf, und ob die Nachricht unterwegs verändert wurde. Trägt euer Formular die Adresse der absendenden Person als Absender ein, fällt diese Prüfung durch, weil euer Server für deren Domain nicht freigegeben ist. Die Nachricht wird einsortiert oder abgewiesen, und der Fehler liegt nicht am Formular, sondern an der Adresse im Absenderfeld.
Die Lösung ist unspektakulär: Absender auf einer eigenen Domain, Adresse aus dem Formular als Antwortadresse. Damit sieht der Empfänger im Postfach weiterhin, worum es geht, und die Antwort per Klick geht an die richtige Stelle. Dazu gehören auf der Serverseite die passenden Einträge im Namenssystem, die üblicherweise die Administration setzt.
Getestet wird gegen ein externes Postfach, nicht gegen die eigene Adresse im Haus. Der eigene Mailserver behandelt Nachrichten aus dem eigenen Netz oft anders, deshalb sagt ein erfolgreicher Test im Haus wenig über die Zustellung nach draußen aus. Ein zweiter Test nach jedem Umzug oder Providerwechsel gehört ebenfalls dazu.
Uploads und wo sie hingehören
Ein Dateiupload ist der Punkt, an dem aus einem Formular ein Datenschutzthema wird. Landet die Datei in einer öffentlich erreichbaren Ablage, ist sie über ihre Adresse abrufbar, auch ohne Anmeldung, und Adressen werden erraten, geteilt und in Verläufen mitgeschleppt. Für Bewerbungsunterlagen oder Rechnungen ist das keine theoretische Sorge.
Für solche Formulare gehört das Zielverzeichnis in eine Ablage außerhalb des öffentlich ausgelieferten Bereichs. Zusätzlich schränkt der Editor die erlaubten Dateiarten und die maximale Größe ein, was zwei Probleme auf einmal löst: das der versehentlich hochgeladenen zwanzig Megabyte und das der ausführbaren Datei.
Und wenn der Anhang ohnehin per Mail zugestellt wird, gehört die Aktion zum Löschen der Uploads ans Ende der Kette. Sonst sammelt sich über Monate eine Kopie jeder eingegangenen Datei an, die niemand mehr auf dem Schirm hat und die bei jeder Auskunftsanfrage berücksichtigt werden müsste.
Aufbewahrung und Löschen
Die Datenschutz-Grundverordnung verlangt, personenbezogene Daten in einer Form zu speichern, die eine Identifizierung nur so lange erlaubt, wie es für den Zweck der Verarbeitung erforderlich ist. Für ein Kontaktformular heißt das: Die Anfrage darf bearbeitet werden, danach beginnt die Frage nach der Löschung. Eine feste Frist gibt die Verordnung nicht vor, eine Festlegung im Haus schon.
Praktisch betrifft das drei Orte. Das Postfach, in dem die Benachrichtigungen liegen, die Datenbanktabelle, falls die Aktion zum Speichern aktiv ist, und die Ablage der Uploads. Der Core bringt für keinen dieser Orte eine automatische Löschung mit, die aus dem Formular heraus konfiguriert wäre. Das ist Organisation, nicht Technik.
Deshalb lohnt die Frage vor dem Freischalten: Wer schaut in dieses Postfach, wie lange bleiben die Einträge, und wer entfernt sie. Wenn darauf niemand antworten kann, ist die einfachste Lösung, das Speichern in der Datenbank gar nicht erst zu aktivieren und es bei der Benachrichtigung zu belassen.
Dazu passende Kurse
Formulare gehören zu den Aufgaben, die selten anfallen und dann sofort sitzen müssen, deshalb behandeln TYPO3 für die tägliche Redaktionsarbeit sie zusammen mit den übrigen Handgriffen.
Wie sicher bist du beim Thema wirklich?
Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.
Wo du genau das übst
Sehr kompetente und freundliche Trainerin. Die Inhalte wurden gut strukturiert und anhand von anschaulichen Beispielen vermittelt.
Häufige Fragen
Brauche ich für ein Kontaktformular eine zusätzliche Erweiterung?
Warum landen die Bestätigungsmails im Spam?
Wo landen hochgeladene Dateien?
Muss ich die Eingaben in der Datenbank speichern?
Deine Ansprechpartner
Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Hilft dir, aus dem TYPO3-Programm den passenden Kurs für deinen Stand zu finden.
Norbert Jansen
Beratung & Inhouse
Plant mit dir Inhouse-Trainings, die auf eure Abläufe und euren Datenbestand zugeschnitten sind.
Ein Formular, das bis zum Postfach funktioniert
Bei cmt baust du ein Formular vom ersten Feld bis zur Abschlussaktion selbst auf und lernst dabei die Stellen kennen, an denen es im Betrieb erfahrungsgemäß hakt.