Markus Michalski FAQ

Newsletter Management: Installation und Betrieb

Installation des Newsletter-Management-Plugins für Sylius per Composer, Setup-Command, Update, Cronjobs für Versand und Bereinigung, eigener Mailer-Transport und Deinstallation

English Version

Zurück zur Übersicht

Newsletter Management: Installation und Betrieb

Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.

Installation

Composer (Packeton)

Hinweis: Das Repository ist privat und wird über Packeton verwaltet (https://packeton.markus-michalski.net). Zugangsdaten bekommst du nach dem Lizenzkauf.

Packeton als Repository in der composer.json deines Shops eintragen:

{ "repositories": [{ "type": "composer", "url": "https://packeton.markus-michalski.net" }] }

Dann das Plugin installieren:

composer require mmd/sylius-newsletter-management-plugin

Danach, in genau dieser Reihenfolge:

  1. Bundle registrieren in config/bundles.php:

    Mmd\SyliusNewsletterManagementPlugin\MmdSyliusNewsletterManagementPlugin::class => ['all' => true],
    
  2. Routen importieren, zum Beispiel in config/routes/mmd_newsletter_management.yaml:

    mmd_sylius_newsletter_management_admin:
        resource: "@MmdSyliusNewsletterManagementPlugin/config/routes/admin.yaml"
    
    mmd_sylius_newsletter_management_shop:
        resource: "@MmdSyliusNewsletterManagementPlugin/config/routes/shop.yaml"
    

    Die Admin-Routen hängen am Parameter sylius_admin.path_name, einen eigenen Präfix brauchst du nicht.

  3. Setup-Command ausführen:

    bin/console mmd:newsletter-management:setup
    

Grids, Twig Hooks und das Mail-Template registrieren sich selbst, das Plugin bringt keine Assets mit, die du installieren müsstest. Ein assets:install ist deshalb nicht nötig.

Der Setup-Command

mmd:newsletter-management:setup ersetzt doctrine:migrations:migrate und tut Folgendes:

Auch bin/console doctrine:migrations:migrate funktioniert, führt aber alle offenen Migrationen deines Projekts aus, nicht nur die dieses Plugins.

Erste Schritte nach der Installation

  1. Im Admin zu MMKreativ Plugins → Newsletterverwaltung gehen.
  2. Für jeden Channel, der einen Newsletter anbieten soll, eine Konfiguration anlegen und aktivieren.

Ein Channel ohne aktivierte Konfiguration bietet keine Anmeldung an: /newsletter und die Shop API antworten mit 404, es gibt kein Footer-Formular, und die Newsletter-Checkbox des Sylius-Cores bleibt unangetastet.

Die Einstellungen im Detail stehen unter Konfiguration.

Optional kannst du die Farben des Bestätigungs-Buttons in den Mails an dein Theme anpassen:

# config/packages/mmd_sylius_newsletter_management.yaml
mmd_sylius_newsletter_management:
    email:
        button_color: '#1663CC'
        button_text_color: '#ffffff'

Ohne diese Angabe gelten #1abb9c (Button) und #ffffff (Text). Beide Werte müssen Hex-Farben sein.

Update

composer update mmd/sylius-newsletter-management-plugin
bin/console mmd:newsletter-management:setup
bin/console cache:clear

Der Setup-Command ist idempotent und führt nur neue Migrationen aus.

Cronjobs

Newsletter werden von einem Console-Command verschickt, nicht innerhalb der Admin-Anfrage.

Ohne den Cronjob für mmd:newsletter:send geht kein Newsletter hinaus: „Jetzt senden" und „Planen" im Admin stellen den Versand nur in die Warteschlange.

Command Intervall Beschreibung
mmd:newsletter:send jede Minute Startet fällige geplante Newsletter und versendet danach ein Paket ausstehender Mails
mmd:newsletter:subscription:purge täglich Löscht abgemeldete und nie bestätigte Abos nach Ablauf der Fristen des Channels
mmd:newsletter:tracking:purge täglich Löscht anonyme Tracking-Zähler und personenbezogene Tracking-Ereignisse nach Ablauf der Fristen des Channels

Optionen:

Command Option Standard Beschreibung
mmd:newsletter:send --limit 100 Höchstzahl der Mails pro Lauf; bleibe unter dem Mail-Limit deines Hosters
mmd:newsletter:send --delay-ms 0 Pause zwischen zwei Mails in Millisekunden
mmd:newsletter:subscription:purge --older-than Frist des Channels Überschreibt beide Fristen (abgemeldet und unbestätigt) für alle Channels mit dieser Anzahl Tage
mmd:newsletter:tracking:purge --older-than Frist des Channels Überschreibt beide Fristen (anonym und personenbezogen) für alle Channels mit dieser Anzahl Tage

Beispiel für die Crontab:

* * * * * cd /pfad/zum/shop && php bin/console mmd:newsletter:send --limit=100
15 3 * * * cd /pfad/zum/shop && php bin/console mmd:newsletter:subscription:purge
20 3 * * * cd /pfad/zum/shop && php bin/console mmd:newsletter:tracking:purge

Überlappende Läufe von mmd:newsletter:send sind sicher: Jede Zustellung wird atomar reserviert, und eine Reservierung, die ein abgestürzter Lauf nie beendet hat, wird nach 15 Minuten wieder freigegeben. Warum das Plugin Messenger nicht nutzt, steht unter Technische Details.

Die Aufbewahrungsfristen selbst stellst du pro Channel ein, siehe Konfiguration und Tracking und Statistiken.

Eigener Mailer-Transport

Empfohlen: In den Newsletter-Einstellungen des Channels nennt das Feld Mailer-Transport für Newsletter den Namen eines Symfony-Mailer-Transports aus framework.mailer.transports. So kann Massenversand weder den Transport deiner Shop-Mails (Bestellungen, Passwort-Reset) auslasten noch dessen Ruf beschädigen. Leer bedeutet: Standard-Transport. Die Absenderadresse muss zu SPF und DKIM dieses Transports passen.

Deinstallation

Reihenfolge einhalten, damit die Migrationen bei noch registriertem Bundle zurückgerollt werden:

  1. Eigene Template-Overrides des Plugins entfernen (templates/bundles/MmdSyliusNewsletterManagementPlugin/, falls vorhanden) sowie eigene Aufrufe seiner Twig-Funktionen und Hooks.

  2. Migrationen zurückrollen, pro Version einzeln, neueste zuerst. Das löscht alle Newsletter-Tabellen samt Abonnenten:

    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20261001110000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20261001100000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930170000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930160000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930150000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930140000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930130000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930120000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930110000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260930100000'
    bin/console doctrine:migrations:execute --down 'Mmd\SyliusNewsletterManagementPlugin\Migrations\Version20260929094744'
    
  3. Routen-Import (config/routes/mmd_newsletter_management.yaml), Bundle-Eintrag in config/bundles.php und gegebenenfalls config/packages/mmd_sylius_newsletter_management.yaml entfernen.

  4. Plugin entfernen:

    composer remove mmd/sylius-newsletter-management-plugin
    

Beim Zurückrollen werden Abonnenten, Newsletter, Zustellprotokoll und Tracking-Daten unwiderruflich gelöscht. Exportiere vorher die Abonnentenliste als CSV und sichere die Datenbank.