Markus Michalski FAQ

Newsletter Management

Newsletter signup, subscriber management and sending for Sylius - double opt-in, categories, per-channel settings, tracking, statistics, CSV export, storefront and Shop API

Deutsche Version

Back to Sylius plugins

Newsletter Management

Sylius
PHP
License

This documentation always describes the latest published version.

Overview

Newsletter signup, subscriber management and sending for Sylius shops. Visitors sign up on a dedicated page or through the footer form, confirm with double opt-in and manage their subscription through a personal link, with no login. In the admin you write newsletters, send or schedule them, review the delivery log and statistics, and export the subscriber list as CSV.

Everything works in both modes: the Twig storefront and the Shop API (headless) share the same business logic. Settings apply per channel.

The plugin can be switched on per channel: as long as a channel has no enabled configuration, it offers no signup at all (the page and the Shop API answer 404, and there is no footer form).

graph LR
    A["Storefront: /newsletter and footer"] --> C["NewsletterSubscriptionManager"]
    B["Shop API: /shop/newsletter-subscriptions"] --> C
    C --> D["Channel settings"]
    D --> E["Subscription in the database"]
    D --> F["Mails: confirmation, welcome"]
    G["Admin: write, send, schedule newsletters"] --> H["Deliveries in the database"]
    I["Cron job: mmd:newsletter:send"] --> H
    H --> J["Newsletter mails to confirmed subscribers"]

Documentation

Page Contents
Installation and operation Installation, setup command, update, cron jobs, uninstalling
Configuration Per-channel settings, categories, admin interface, practical examples
Storefront integration Signup page, footer form, confirmation, managing a subscription, unsubscribing, Twig hooks, theme notes
Shop API / headless Endpoints for signup, confirmation, unsubscribing, preferences and categories, error format
Writing and sending newsletters Editor, placeholders, preview and test send, send now, scheduling, delivery log
Tracking and statistics Tracking modes, statistics dashboard, retention periods and cleanup
Extending Event before signup, form extension, ALTCHA, overriding templates
Troubleshooting and FAQ Common problems, known limitations, frequently asked questions
Technical details Architecture, plugin structure, entities and tables

Features

Feature Description
Signup with double opt-in Dedicated /newsletter page and footer form; confirmation link by mail, switchable per channel
Prefetch-safe unsubscribe The unsubscribe link only shows a page; the subscriber is unsubscribed only by clicking the button
Categories Translatable newsletter categories, optionally restricted to certain channels; no selection means the general newsletter
Per-channel settings Newsletter on/off, double opt-in, footer form, sender, privacy policy page, mailer transport, tracking, retention periods
Sylius checkbox becomes a real subscription The newsletter checkbox from registration and the customer account creates a subscription with double opt-in
Manage without login Welcome mail with a personal link to change name and categories and to unsubscribe
Newsletter editor Subject, preheader, HTML and text, placeholders, preview, test send, duplicate
Sending and scheduling Send now or schedule, delivery in batches by cron job, retries, delivery log
Tracking Off, anonymous (counters only) or personal with consent
Statistics Admin dashboard with subscriber trend and per-newsletter figures
Retention and cleanup Periods per channel; two commands clean up subscriptions and tracking data
CSV export Subscriber list from the admin, filterable by status and channel
Shop API Signup, confirmation, unsubscribing, preferences and categories headless
Spam protection hook Event before every signup and an extensible form, used by the ALTCHA plugin

Requirements

Requirement Version Notes
Sylius ^2.2 Tested against Sylius 2.2 and 2.3
PHP ^8.3
Symfony ^7.4
API Platform ^4.2.1 or ^5.0 api-platform/doctrine-orm, api-platform/metadata and api-platform/state for the Shop API; your project's Sylius version decides which major version is installed
Database MySQL or MariaDB The migrations are written in MySQL syntax (AUTO_INCREMENT, ENGINE = InnoDB); PostgreSQL is not supported
kernel.secret not empty In Sylius taken from APP_SECRET. It signs the tracking links in the newsletters; all application servers must use the same value
Cron job required Without mmd:newsletter:send no newsletter goes out, see Installation

License

License

Commercial license, all rights reserved.

Support

For questions about the license, technical questions or bugs, contact me at support@markus-michalski.net.