Newsletter Management: Konfiguration
Newsletter Management für Sylius: Einstellungen pro Channel, Kategorien, Admin-Listen, CSV-Export, Absender, Datenschutz-Link, Mailer-Transport und Praxisbeispiele
Newsletter Management: Konfiguration
Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.
Alle Einstellungen, die den Betrieb im Shop betreffen, pflegst du im Admin und pro Channel (im Admin heißt er „Kanal“). Nur die Farben der Buttons in den Mails liegen in einer Konfigurationsdatei. Diese Seite beschreibt die Einstellungen, die Newsletter-Kategorien, die Admin-Listen und den CSV-Export der Abonnenten.
Überblick: Wo finde ich was?
Das Plugin hat genau einen Eintrag in der Admin-Seitenleiste: MMKreativ Plugins → Newsletterverwaltung (englisch „Newsletter management“). Der Eintrag öffnet die Liste der Newsletter-Einstellungen. Alles andere erreichst du über Buttons in der Titelleiste dieser Seite und kommst über einen Button in der Titelleiste der jeweiligen Seite wieder zurück.
| Button in der Titelleiste | Ziel |
|---|---|
| Newsletter | Liste der Newsletter: schreiben, versenden, planen (siehe Newsletter schreiben und versenden) |
| Statistik | Dashboard mit Abonnentenzahlen und Trend (siehe Tracking und Statistik) |
| Abonnenten | Liste aller Anmeldungen mit CSV-Export |
| Kategorien | Liste der Newsletter-Kategorien |
Die Kategorien stehen außerdem direkt unter der Einstellungsliste, samt Button zum Anlegen. Ohne Kategorie zeigt das Anmeldeformular keine Auswahl.
Solange für einen Channel keine Einstellungen angelegt sind oder „Newsletter aktiv“ aus ist, verhält sich dieser Channel, als wäre das Plugin nicht installiert: Die Seite
/newsletterliefert 404, das Footer-Formular fehlt, und die Newsletter-Checkbox von Sylius wird nicht angefasst. Abmelde- und Verwaltungslinks bereits versendeter Mails funktionieren weiter.
Einstellungen pro Channel
Die Einstellungen sind keine Bundle-Konfiguration, sondern Datensätze in der Datenbank. Pro Channel gibt es höchstens einen Datensatz. Lege ihn mit „Erstellen“ in der Liste der Newsletter-Einstellungen an und wähle dort den Channel.
| Einstellung (Label im Admin) | Standard | Beschreibung |
|---|---|---|
| Newsletter aktiv | aus | Hauptschalter. Solange er aus ist, zeigt der Channel kein Anmeldeformular und nimmt keine Anmeldungen an. |
| Double-Opt-in | an | Eine Anmeldung zählt erst, wenn der Kunde den Link in der Bestätigungsmail angeklickt hat. Ohne Double-Opt-in ist die Anmeldung sofort bestätigt. In der EU in der Regel Pflicht. |
| Anmeldeformular im Footer | an | Zeigt im Footer des Shops ein kompaktes Formular (E-Mail-Adresse und Button), das zur Anmeldeseite weiterleitet. |
| Seite der Datenschutzerklärung | leer | Ziel des Links an der Einwilligungs-Checkbox (siehe Abschnitt „Link zur Datenschutzerklärung“ weiter unten). Leer = kein Link. Maximal 255 Zeichen. |
| Abgemeldete Abonnements aufbewahren (Tage) | 1095 | Wertebereich 30 bis 3650. Danach löscht mmd:newsletter:subscription:purge abgemeldete Anmeldungen endgültig. |
| Unbestätigte Anmeldungen aufbewahren (Tage) | 30 | Wertebereich 7 bis 365. Danach löscht derselbe Befehl Anmeldungen, deren Bestätigungslink nie angeklickt wurde. Betrifft nur Double-Opt-in. |
| Tracking | Aus | Aus, Anonym (nur Zähler) oder Personenbezogen, mit Einwilligung des Abonnenten. Details auf der Seite Tracking und Statistik. |
| Tracking-Zähler aufbewahren (Tage) | 365 | Wertebereich 30 bis 3650. Älteren Zähler löscht mmd:newsletter:tracking:purge. |
| Wortlaut der Tracking-Einwilligung | leer (Standardtext des Plugins) | Nur im Modus „Personenbezogen“ sichtbar. Text der freiwilligen Checkbox, maximal 1000 Zeichen. Er wird bei jeder Einwilligung als Nachweis mitgespeichert. |
| Personenbezogene Tracking-Ereignisse aufbewahren (Tage) | 90 | Nur im Modus „Personenbezogen“ sichtbar. Wertebereich 7 bis 730. Auch dafür sorgt mmd:newsletter:tracking:purge. |
| Mailer-Transport für Newsletter | leer (Standard-Transport) | Name eines Symfony-Mailer-Transports, der nur die Newsletter dieses Channels versendet (siehe Eigener Mailer-Transport). Erlaubt sind Buchstaben, Ziffern, _, . und -. |
| Absendername | Name des Channels | Absendername der Mails. |
| Absender-E-Mail | Kontakt-E-Mail des Channels | Absenderadresse der Mails. Muss eine gültige E-Mail-Adresse sein. |
Wann die beiden Löschbefehle laufen müssen und wie du sie als Cronjob einrichtest, steht auf der Seite Installation und Betrieb. Die Aufbewahrungsfristen wirken erst, wenn die Befehle regelmäßig laufen.
Absender
Das Plugin kennt zwei Mailwege, die beide den Absender des Channels verwenden:
- Bestätigungs-, Willkommens- und „Bereits angemeldet“-Mail laufen über den Mailer von Sylius. Der Absendername ist die Einstellung „Absendername“, sonst der Channel-Name. Die Absenderadresse ist die Einstellung „Absender-E-Mail“, sonst die Kontakt-E-Mail des Channels, zuletzt der Standard-Absender aus
sylius_mailer. - Newsletter laufen über den Symfony Mailer. Absendername ist „Absendername“, sonst der Channel-Name. Die Absenderadresse ist „Absender-E-Mail“, sonst die Kontakt-E-Mail des Channels. Fehlt beides, lässt sich der Newsletter weder senden noch als Test senden, und der Admin weist darauf hin.
Link zur Datenschutzerklärung
Die Einwilligungs-Checkbox des Anmeldeformulars verlinkt auf die Datenschutzerklärung, sobald „Seite der Datenschutzerklärung“ gesetzt ist. Der Link öffnet in einem neuen Tab, damit ein halb ausgefülltes Formular erhalten bleibt. Drei Schreibweisen sind erlaubt:
| Schreibweise | Beispiel | Verhalten |
|---|---|---|
| Routenname | shop_legal_datenschutz |
Die URL wird aus der Route erzeugt. Hat die Route einen Platzhalter {_locale}, setzt das Plugin die aktuelle Sprache ein. |
| Pfad | /{_locale}/datenschutz |
{_locale} wird durch das Sprachkürzel der aktuellen Sprache ersetzt, zum Beispiel de. Ein Pfad beginnt mit genau einem /. |
| Vollständige URL | https://example.com/{_locale}/privacy |
Beginnt mit http:// oder https://. {_locale} wird ebenfalls ersetzt. |
Ein Routenname, den es nicht gibt (umbenannt, Tippfehler) oder der weitere Parameter braucht, ergibt keinen Link. Die Anmeldeseite funktioniert trotzdem, der Einwilligungstext erscheint dann ohne Link. Eine Eingabe in einer anderen Form lehnt das Formular beim Speichern mit einer Fehlermeldung ab.
Eigener Mailer-Transport
Mit „Mailer-Transport für Newsletter“ trennst du Newsletter vom Versand der Shop-Mails, zum Beispiel über einen eigenen Versanddienstleister. Trage den Namen eines Transports aus framework.mailer.transports ein. Das Plugin setzt beim Versand jedes Newsletters den Header X-Transport, den Symfony Mailer auswertet und vor dem Versand entfernt.
# config/packages/mailer.yaml
framework:
mailer:
transports:
main: '%env(MAILER_DSN)%'
newsletter: '%env(MAILER_NEWSLETTER_DSN)%'
Trage dann im Admin bei „Mailer-Transport für Newsletter“ den Wert newsletter ein. Ohne Eintrag nutzt der Newsletter den Standard-Transport.
Der Transport gilt nur für Newsletter. Bestätigungs-, Willkommens- und „Bereits angemeldet“-Mail laufen weiter über den Standard-Transport des Shops.
Konfigurationsdatei: Farben der Mail-Buttons
Der Button in den Mails des Plugins (Bestätigen, Anmeldung verwalten) verwendet standardmäßig ein Türkis. Passt das nicht zu deinem Theme, setzt du die Farben in einer Konfigurationsdatei. Das ist die einzige Bundle-Konfiguration des Plugins.
| Schlüssel | Standard | Beschreibung |
|---|---|---|
mmd_sylius_newsletter_management.email.button_color |
#1abb9c |
Hintergrundfarbe des Buttons als Hex-Farbe (# plus 3 bis 8 Hexziffern) |
mmd_sylius_newsletter_management.email.button_text_color |
#ffffff |
Textfarbe des Buttons, gleiches Format |
# config/packages/mmd_sylius_newsletter_management.yaml
mmd_sylius_newsletter_management:
email:
button_color: '#1663CC'
button_text_color: '#ffffff'
Eine ungültige Farbe bricht den Container-Aufbau mit der Meldung Expected a hex color such as "#1663CC". ab. Das Plugin liest keine eigenen Umgebungsvariablen.
Newsletter-Kategorien
Mit Kategorien (zum Beispiel „Neue Produkte“ oder „Anleitungen“) können sich Abonnenten für Themen entscheiden. Du pflegst sie unter Kategorien oder direkt unter der Einstellungsliste.
| Feld | Beschreibung |
|---|---|
| Code | Eindeutige Kennung, nur Kleinbuchstaben, Ziffern, - und _, maximal 50 Zeichen. Der Code steht im CSV-Export und in der Shop API. |
| Übersetzungen | Name (Pflicht) und Beschreibung, je Sprache. Die Beschreibung erscheint im Anmeldeformular unter der Checkbox der Kategorie. |
| Kanäle | Die Channels, in denen die Kategorie angeboten wird. Nichts gewählt = alle Channels. |
| Für Kunden sichtbar | Nur aktive Kategorien erscheinen im Formular. Neue Kategorien sind aktiv. |
| Position | Sortierung in der Liste und im Formular, aufsteigend. Standard 0. |
So wirken die Kategorien:
- Das Anmeldeformular und die Seite zur Verwaltung der Anmeldung bieten nur aktive Kategorien des eigenen Channels an. Gibt es keine, erscheint keine Auswahl, und alle Abonnenten bekommen den allgemeinen Newsletter.
- Wählt ein Abonnent keine Kategorie, bekommt er alles. Beim Versand eines Newsletters, dem du Kategorien zugewiesen hast, erhalten ihn Abonnenten mit mindestens einer passenden Kategorie und Abonnenten ohne Kategorie. Ein Newsletter ohne Kategorien geht an alle bestätigten Abonnenten des Channels.
- Eine Kategorie, die für andere Channels beschränkt ist, lässt sich nicht wählen, auch nicht mit einer manipulierten Anfrage.
Admin-Listen
| Liste | Bearbeitbar? | Spalten | Filter |
|---|---|---|---|
| Newsletter-Einstellungen (Startseite) | Erstellen, Bearbeiten, Löschen | Channel, Newsletter aktiv, Double-Opt-in, Absender-E-Mail | keine |
| Kategorien | Erstellen, Bearbeiten, Löschen | Position, Code, Name, Für Kunden sichtbar | keine (Sortierung nach Position) |
| Abonnenten | Nur ansehen und löschen. Anmeldungen legt der Kunde selbst an, ein Admin legt keine an und bearbeitet sie nicht. | E-Mail, Name, Status, Channel, Angemeldet am, Bestätigt am (Standard: neueste zuerst) | Suche (E-Mail, Vorname, Nachname), Status, Channel |
| Newsletter | Erstellen, Ansehen, Bearbeiten, Löschen | Betreff, Channel, Empfänger, Sprache, Status, Versendet am, Zuletzt geändert | Suche (Betreff), Channel, Status |
Die Detailseite eines Abonnenten zeigt unter anderem Quelle (Shop-Formular, API, Registrierung oder Admin), Sprache, Zeitpunkt und IP-Adresse von Anmeldung und Bestätigung sowie den Zeitpunkt der Abmeldung als Nachweis der Einwilligung. Die Liste der Newsletter beschreibt die Seite Newsletter schreiben und versenden.
CSV-Export der Abonnenten
In der Titelleiste der Abonnentenliste gibt es zwei Buttons: Bestätigte exportieren (CSV) und Alle exportieren (CSV). Die Datei heißt newsletter-subscribers-JJJJ-MM-TT.csv. Sie ist UTF-8 mit BOM kodiert, damit Excel Umlaute richtig anzeigt, und verwendet ; als Trennzeichen.
| Spalte | Inhalt |
|---|---|
email |
E-Mail-Adresse |
first_name, last_name |
Vor- und Nachname, sofern angegeben |
status |
pending, confirmed oder unsubscribed |
channel |
Code des Channels |
locale |
Sprache bei der Anmeldung |
tracking_consent |
yes oder no |
categories |
Codes der gewählten Kategorien, durch Komma getrennt |
signed_up_at, confirmed_at, unsubscribed_at |
Zeitpunkte im Format JJJJ-MM-TT HH:MM:SS |
Der Export lässt sich über Parameter an der URL einschränken: /admin/newsletter-subscriptions/export?status=confirmed&channel=de_shop&category=neuheiten. status akzeptiert pending, confirmed und unsubscribed (jeder andere Wert ergibt Fehler 400), channel den Code eines Channels, category den Code einer Kategorie. Der Pfadanteil admin ist der konfigurierte Admin-Pfad deines Shops. Zellen, die mit =, +, - oder @ beginnen, bekommen ein vorangestelltes Hochkomma, damit Tabellenkalkulationen sie nicht als Formel ausführen.
Praxis-Beispiele
Deutscher Shop mit Double-Opt-in
Ein Shop mit einem Channel de_shop, der den Newsletter datenschutzkonform betreibt:
| Einstellung | Wert |
|---|---|
| Channel | de_shop |
| Newsletter aktiv | an |
| Double-Opt-in | an |
| Anmeldeformular im Footer | an |
| Seite der Datenschutzerklärung | /{_locale}/datenschutz |
| Absendername | Beispiel-Shop |
| Absender-E-Mail | newsletter@beispiel-shop.de |
| Abgemeldete Abonnements aufbewahren (Tage) | 1095 |
| Unbestätigte Anmeldungen aufbewahren (Tage) | 30 |
Legt der Shop den Link zur Datenschutzerklärung stattdessen als Route an (zum Beispiel shop_legal_datenschutz), trägst du den Routennamen ein, und die Sprache wird automatisch berücksichtigt.
Mehrere Channels mit getrennten Absendern
Ein Shop betreibt de_shop und en_shop. Lege für jeden Channel eigene Einstellungen an, weil Absender, Datenschutzseite und Transport pro Channel gelten:
| Einstellung | de_shop |
en_shop |
|---|---|---|
| Absendername | Beispiel-Shop |
Example Shop |
| Absender-E-Mail | newsletter@beispiel-shop.de |
newsletter@example-shop.com |
| Seite der Datenschutzerklärung | /de/datenschutz |
/en/privacy |
| Mailer-Transport für Newsletter | newsletter |
leer |
Legst du die Kategorie „Neue Produkte“ ohne Channel-Auswahl an, erscheint sie in beiden Channels. Wählst du bei der Kategorie „Nur für Deutschland“ nur de_shop, bietet sie nur dieser Channel an. Ein Abonnent gehört immer zu genau einem Channel; dieselbe E-Mail-Adresse kann in beiden Channels separat angemeldet sein.
Personenbezogenes Tracking mit Einwilligung
Du willst wissen, wer deinen Newsletter öffnet und klickt, aber nur mit Einwilligung:
| Einstellung | Wert |
|---|---|
| Tracking | Personenbezogen, mit Einwilligung des Abonnenten |
| Tracking-Zähler aufbewahren (Tage) | 365 |
| Personenbezogene Tracking-Ereignisse aufbewahren (Tage) | 90 |
| Wortlaut der Tracking-Einwilligung | Ich willige ein, dass das Öffnen dieses Newsletters und meine Klicks auf seine Links einzeln erfasst werden, damit wir den Newsletter verbessern können. Ich kann das jederzeit widerrufen. |
Im Anmeldeformular erscheint dann zusätzlich eine eigene, freiwillige Checkbox mit diesem Text, getrennt von der Einwilligung zum Newsletter. Der Text wird bei jeder Einwilligung mitgespeichert. Wer die Checkbox nicht ankreuzt, bekommt den Newsletter trotzdem, wird aber nur anonym gezählt.
Jedes Tracking musst du in deiner Datenschutzerklärung nennen.