PHPackages                             silverstripe/newsletter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. silverstripe/newsletter

AbandonedSilverstripe-vendormodule[Mail &amp; Notifications](/categories/mail)

silverstripe/newsletter
=======================

Newsletter module allows a backend CMS users send newsletters to different mailing lists

1.0.0(8y ago)7011.1k↓100%59[21 issues](https://github.com/silverstripe-archive/silverstripe-newsletter/issues)[1 PRs](https://github.com/silverstripe-archive/silverstripe-newsletter/pulls)PHP

Since Nov 27Pushed 4y ago18 watchersCompare

[ Source](https://github.com/silverstripe-archive/silverstripe-newsletter)[ Packagist](https://packagist.org/packages/silverstripe/newsletter)[ RSS](/packages/silverstripe-newsletter/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (4)Versions (13)Used By (0)

SilverStripe Newsletter Module
==============================

[](#silverstripe-newsletter-module)

[![Build Status](https://camo.githubusercontent.com/09efacd03b9e2d37e212c1965512e1d6863277150d0c2e22217d02cf785821e6/68747470733a2f2f7365637572652e7472617669732d63692e6f72672f73696c7665727374726970652d617263686976652f73696c7665727374726970652d6e6577736c65747465722e706e673f6272616e63683d6d6173746572)](https://travis-ci.org/silverstripe-labs/silverstripe-newsletter)

Installation
------------

[](#installation)

This module requires `silverstripe/cms` and `symbiote/silverstripe-queuedjobs`and is compatible with SilverStripe 4.

```
composer require silverstripe/newsletter "2.x-dev"

```

Introduction
------------

[](#introduction)

Overview
--------

[](#overview)

The module manages the creation and sending of newsletters through the CMS, in a very similar fashion to editing pages.

Features:

- WYSIWYG newsletter creation (incl. images and preview)
- HTML emails (with auto-conversion to text)
- Subscription page (in your own theme style)
- Subscription confirmation by email
- Unsubscribe by URL and web confirmation
- Queued email sending (requires ["messagequeue" module](https://github.com/silverstripe-labs/silverstripe-messagequeue))
- Batch sending and throttling
- Custom SilverStripe templates for emails
- Link tracking
- Recipient blacklisting
- Bounce tracking (experimental)
- Decoratable `Recipient` class to add more properties

Configuration
-------------

[](#configuration)

### Email Templates

[](#email-templates)

Newsletter templates are standard SilverStripe templates, with a few extra placeholders.

- `UnsubscribeLink`: Personalized link to unsubscribe from newsletter
- `AbsoluteBaseURL`: Absolute URL to the website
- `To`: Recipient email address
- `From`: Sender email address
- `Subject`: Newsletter subject
- `Recipient.Title`: Recipient full name, including salutation, first/middle/last name (all optional)
- `Recipient.Salutation`
- `Recipient.FirstName`
- `Recipient.Surname`
- `Recipient.Email`
- `Now`: Current date and time (format e.g. with $Now.Nice)

Templates are created in `mysite/templates/Email`. So for example, if you created `Newsletter.ss` inside `mysite/templates/email` then the plugin will recognise this new file and let you select it in the dropdown. You'll find a default template with minimal styling in `templates/Emails/SimpleNewsletterTemplate.ss`.

Template paths are configurable using the *Config API*

```
*mysite/_config/newsletter.yml*
:::yaml
SilverStripe\Newsletter\Control\NewsletterAdmin
    template_paths:
        - "themes/mytemplate/templates/email";

```

Usage
-----

[](#usage)

### Mailing Lists and Recipients

[](#mailing-lists-and-recipients)

A mailing list (class `MailingList`) can contain many recipients (class `Recipient`). Both can be created through the "Newsletter" Admin UI. Each newsletter can be sent to one or more mailing lists. The current recipients of a mailing list are copied to a `SendRecipientQueue` once a newsletter sending process starts, fixing the mailing list state for this newsletter.

### Queuing

[](#queuing)

Generating emails is processing intensive, at least on the scale of potentially several thousand recipients. We need a safe way to track already sent message in case of a fatal error halfway through. Also, sending large volumes of email in a short period of time can get you blacklisted. Which is why the newsletter uses a queue to send emails.

Each individual email for a newsletter is queued up as a `SendRecipientQueue`record. This queue is worked off by queued job `NewsletterMailerJob` in configurable batches. For more information about the queuing process see the `symbiote/silverstripe-queuedjobs` module.

### Bounce Handling

[](#bounce-handling)

The modules allows tracking of email "bounces" per recipient, for email which could not be delivered for some reason.

It's important to keep your mailing list clean of recipients which permanently deny delivery, in terms of decreasing the likelihood that your outgoing mail is classified as spam by other parties.

The `Recipient` model has `BouncedCount` and `Blacklisted` properties to track this. By default, this has to be handled manually by the recipient of your "reply-to" address as configured through the newsletter admin UI. This mailbox should be regularly scanned for bouned emails, and their original recipients blacklisted by ticking the "Blacklisted" checkbox in the admin UI for that recipient.

Note: This process can be automated by forwarding bounce emails to the ["emailbouncehandler" module](https://github.com/silverstripe-labs/silverstripe-emailbouncehandler). This process is experimental at the moment, some assembly required.

Contributing
------------

[](#contributing)

### Translations

[](#translations)

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use  to contribute translations, rather than sending pull requests with YAML files.

See the ["i18n" topic](http://doc.silverstripe.org/framework/en/trunk/topics/i18n) on doc.silverstripe.org for more details.

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance14

Infrequent updates — may be unmaintained

Popularity38

Limited adoption so far

Community32

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~248 days

Recently: every ~628 days

Total

12

Last Release

2132d ago

Major Versions

0.6.x-dev → 1.0.02017-07-20

### Community

Maintainers

![](https://www.gravatar.com/avatar/b0cba8b534e20e6ab4fff555a97b237a18436ebca1446fc0b29c8a8b504038b9?d=identicon)[GuySartorelli](/maintainers/GuySartorelli)

![](https://avatars.githubusercontent.com/u/111025?v=4)[Ingo Schommer](/maintainers/chillu)[@chillu](https://github.com/chillu)

![](https://www.gravatar.com/avatar/be6648e60fbab6f70bfc34dd8c14259562d28a47510a934ea9c01fe98633f3c2?d=identicon)[sminnee](/maintainers/sminnee)

---

Top Contributors

[![normann](https://avatars.githubusercontent.com/u/556224?v=4)](https://github.com/normann "normann (109 commits)")[![chillu](https://avatars.githubusercontent.com/u/111025?v=4)](https://github.com/chillu "chillu (90 commits)")[![wilr](https://avatars.githubusercontent.com/u/101629?v=4)](https://github.com/wilr "wilr (16 commits)")[![ss23](https://avatars.githubusercontent.com/u/191510?v=4)](https://github.com/ss23 "ss23 (12 commits)")[![dhensby](https://avatars.githubusercontent.com/u/563596?v=4)](https://github.com/dhensby "dhensby (10 commits)")[![andrewandante](https://avatars.githubusercontent.com/u/9702648?v=4)](https://github.com/andrewandante "andrewandante (9 commits)")[![ajshort](https://avatars.githubusercontent.com/u/31570?v=4)](https://github.com/ajshort "ajshort (9 commits)")[![Zauberfisch](https://avatars.githubusercontent.com/u/186158?v=4)](https://github.com/Zauberfisch "Zauberfisch (3 commits)")[![mateusz](https://avatars.githubusercontent.com/u/118653?v=4)](https://github.com/mateusz "mateusz (3 commits)")[![remcozigterman](https://avatars.githubusercontent.com/u/78798355?v=4)](https://github.com/remcozigterman "remcozigterman (3 commits)")[![ajoneil](https://avatars.githubusercontent.com/u/460342?v=4)](https://github.com/ajoneil "ajoneil (2 commits)")[![alexandruz](https://avatars.githubusercontent.com/u/36546?v=4)](https://github.com/alexandruz "alexandruz (2 commits)")[![assertchris](https://avatars.githubusercontent.com/u/200609?v=4)](https://github.com/assertchris "assertchris (2 commits)")[![cjsewell](https://avatars.githubusercontent.com/u/1856199?v=4)](https://github.com/cjsewell "cjsewell (2 commits)")[![mandrew](https://avatars.githubusercontent.com/u/343938?v=4)](https://github.com/mandrew "mandrew (2 commits)")[![ohararyan](https://avatars.githubusercontent.com/u/1509309?v=4)](https://github.com/ohararyan "ohararyan (2 commits)")[![lingo](https://avatars.githubusercontent.com/u/219531?v=4)](https://github.com/lingo "lingo (1 commits)")[![jimt](https://avatars.githubusercontent.com/u/180326?v=4)](https://github.com/jimt "jimt (1 commits)")[![Alecxandra](https://avatars.githubusercontent.com/u/5419405?v=4)](https://github.com/Alecxandra "Alecxandra (1 commits)")[![IgorNadj](https://avatars.githubusercontent.com/u/667652?v=4)](https://github.com/IgorNadj "IgorNadj (1 commits)")

---

Tags

mailemailsilverstripenewsletternewslettersMass Emailedm

### Embed Badge

![Health badge](/badges/silverstripe-newsletter/health.svg)

```
[![Health](https://phpackages.com/badges/silverstripe-newsletter/health.svg)](https://phpackages.com/packages/silverstripe-newsletter)
```

###  Alternatives

[camfindlay/apes

The Automated Provision of Email Services (APES) module will allow you to set up an automated sync mechanism between the SilverStripe Member DataObject and MailChimp.

122.6k](/packages/camfindlay-apes)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
