PHPackages                             marblecms/marble-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. [Utility &amp; Helpers](/categories/utility)
4. /
5. marblecms/marble-newsletter

ActiveMarble-plugin[Utility &amp; Helpers](/categories/utility)

marblecms/marble-newsletter
===========================

Newsletter plugin for Marble CMS: subscribers, lists, campaigns, open/click tracking.

v1.0.1(1mo ago)00MITPHPPHP ^8.3

Since Apr 25Pushed 1mo agoCompare

[ Source](https://github.com/marblecms/plugin-newsletter)[ Packagist](https://packagist.org/packages/marblecms/marble-newsletter)[ RSS](/packages/marblecms-marble-newsletter/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

Marble Newsletter
=================

[](#marble-newsletter)

Double opt-in newsletter management for [Marble CMS](https://github.com/marblecms/admin): subscriber lists, HTML campaigns, open/click tracking.

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

[](#installation)

```
composer require marblecms/marble-newsletter
php artisan marble:newsletter:install
```

Publish config:

```
php artisan vendor:publish --tag=newsletter-config
```

Configuration (`config/newsletter.php`)
---------------------------------------

[](#configuration-confignewsletterphp)

KeyDefaultDescription`from_name``APP_NAME`Sender name`from_email``MAIL_FROM_ADDRESS`Sender email`double_opt_in``true`Require email confirmation`confirmation_subject``'Please confirm…'`Confirmation email subject`confirmation_view``newsletter::emails.confirmation`Confirmation email viewFrontend component
------------------

[](#frontend-component)

```
{{-- Basic --}}

{{-- With list and redirect --}}

{{-- With name field and custom button --}}

```

Props:

- `list-id` — attach subscriber to this list (optional)
- `redirect` — URL to redirect to after submit (default `/`)
- `show-name` — display a name input field (default `false`)
- `button-label` — submit button text (default `Subscribe`)
- `placeholder` — email input placeholder

Double opt-in flow
------------------

[](#double-opt-in-flow)

1. Visitor submits the subscribe form
2. If `double_opt_in = true`, a `ConfirmationMail` is sent with a unique token link
3. Visitor clicks the link → `GET /newsletter/confirm/{token}` → status set to `confirmed`
4. `SubscriberConfirmed` event is fired

Unsubscribe
-----------

[](#unsubscribe)

Add `{{unsubscribe_url}}` anywhere in your campaign body. The mailing service replaces this with the subscriber's unique unsubscribe URL before sending.

Tracking
--------

[](#tracking)

- **Open tracking**: a 1×1 transparent GIF pixel is appended to every campaign email
- **Click tracking**: wrap links using `route('newsletter.track.click', [$token, base64_encode($url)])`

Admin UI
--------

[](#admin-ui)

Navigate to **Newsletter** in the top nav:

SectionDescriptionOverviewStats: confirmed subscribers, lists, sent campaignsSubscribersPaginated list with status, lists, deleteListsCreate/delete subscriber listsCampaignsCreate, edit, view stats, sendArtisan Commands
----------------

[](#artisan-commands)

CommandDescription`marble:newsletter:install`Run migrations`marble:newsletter:send {campaign}`Send campaign by ID (for large lists / cron)Events
------

[](#events)

EventFired when`SubscriberConfirmed`Subscriber confirms opt-in`SubscriberUnsubscribed`Subscriber unsubscribes`CampaignSent`Campaign finished sendingDatabase tables
---------------

[](#database-tables)

TableDescription`newsletter_subscribers`Subscriber records`newsletter_lists`Named groups`newsletter_subscriber_list`Pivot: subscriber ↔ list`newsletter_campaigns`Campaign records`newsletter_sends`One row per subscriber per campaign`newsletter_opens`Open tracking events`newsletter_clicks`Click tracking events

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance90

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

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 ~0 days

Total

2

Last Release

45d ago

### Community

Maintainers

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

### Embed Badge

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

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

###  Alternatives

[demi/seo

Library for working with SEO parameters of models

131.6k](/packages/demi-seo)

PHPackages © 2026

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