Markus Michalski FAQ

Newsletter Management: Konfiguration

Newsletter Management für Sylius: Einstellungen pro Channel, Kategorien, Admin-Listen, CSV-Export, Absender, Datenschutz-Link, Mailer-Transport und Praxisbeispiele

English Version

Zurück zur Übersicht

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 /newsletter liefert 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:

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:

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.