PHPackages                             jvitasek/nwsltr - 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. [Database &amp; ORM](/categories/database)
4. /
5. jvitasek/nwsltr

ActiveProject[Database &amp; ORM](/categories/database)

jvitasek/nwsltr
===============

A ready-made self-hosted mailing system on PHP 8, Vue.js, Doctrine ORM and Nette Framework

1.0(5y ago)25[2 PRs](https://github.com/jvitasek/nwsltr/pulls)BSD-3-ClausePHPPHP &gt;= 8

Since May 5Pushed 3y ago2 watchersCompare

[ Source](https://github.com/jvitasek/nwsltr)[ Packagist](https://packagist.org/packages/jvitasek/nwsltr)[ Docs](https://github.com/jvitasek/nwsltr)[ RSS](/packages/jvitasek-nwsltr/feed)WikiDiscussions main Synced 4w ago

READMEChangelog (1)Dependencies (41)Versions (8)Used By (0)

NWSLTR
======

[](#nwsltr)

[![Build Status](https://camo.githubusercontent.com/23160d1564bc02e7bdce1de3b7cc9bcae9af9e513a49ae7c841ee876a53436e9/68747470733a2f2f7472617669732d63692e6f72672f6a7669746173656b2f6e77736c74722e7376673f6272616e63683d6d61696e)](https://travis-ci.org/jvitasek/nwsltr)[![License](https://camo.githubusercontent.com/fa7d5fcf2c84b580327af52da95dd751703af65f079dc3c5a0081beac0789718/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4e65772532304253442d626c75652e737667)](https://github.com/jvitasek/nwsltr/blob/main/license.md)[![Open Source Software](https://camo.githubusercontent.com/1aa6e8e4427322ec72f07ab2eae1f887d91a98ff1e09b7fadc681e72c2b28adc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6f70656e5f736f757263652d2546302539462541342538442d3344413633392e737667)](https://opensource.org/)

This project contains a ready-made self-hosted mailing system written in PHP8, Nette Framework, Doctrine 2 and Vue.js

System Requirements
-------------------

[](#system-requirements)

- &gt;= PHP 8.0
- &gt;= MySQL 8
- Redis Server
- Composer
- Yarn + Webpack

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

[](#installation)

The ideal way of installing this project is via Composer:

```
$ composer create-project jvitasek/nwsltr
```

Or directly clone this repository:

```
$ git clone https://github.com/jvitasek/nwsltr.git
```

Once you have the project files, do the following:

1. Create an empty MySQL database
2. Create a new file config/test.neon and copy the contents of config/test.sample.neon in there

Now you have two options:

### Automatic installation (recommended)

[](#automatic-installation-recommended)

1. Set the right permissions to the init script: `$ chmod +x bin/init` (UNIX only)
2. Run `$ bin/init` which takes care of all the necessary configuration

### Manual Installation

[](#manual-installation)

1. Create directories log and temp in the root folder (`$ mkdir log temp && chmod +x log temp`)
2. `$ composer i`
3. `$ php bin/console orm:clear-cache:metadata`
4. `$ php bin/console o:s:u -f`
5. `$ chmod +x bin/*` (UNIX only)
6. `$ php bin/console doctrine:fixtures:load -n`
7. `$ cd www/FrontModule && yarn && yarn build`

Self-hosted Use
---------------

[](#self-hosted-use)

During the installation steps you loaded fixtures into the newly created database. These fixtures contain a sample account and a user. Once you finish the installation, you can access the website and log in using these credentials:

E-mail: `admin@sample.com`
Password: `secret`

With these credentials, you can access the system as an administrator. It is recommended to remove this account after creating a new one with a strong password.

### Crontab setup

[](#crontab-setup)

When you self-host this application, you need to set-up a cronjob to automatically send the planned mailings.

```
1-59 * * * * php bin/console mailing:send
```

Alternatively, you can run this command anytime you need to send the newsletter

```
# does a dry run not actually sending the e-mails
$ php bin/console mailing:send -t

# actually sends the e-mails
$ php bin/console mailing:send
```

Tests
-----

[](#tests)

This package comes with some ready-made tests.

### Acceptance Tests

[](#acceptance-tests)

For acceptence tests, Codeception was used. You can run these tests like this:

```
$ php vendor/bin/codecept run --steps
```

### Unit Tests

[](#unit-tests)

Unit and feature tests are run with Nette Tester

```
$ vendor/bin/tester -c tests/tester/php.ini tests/tester
```

### Static Analysis

[](#static-analysis)

There are two static analysis tools to help with detecting and fixing errors in the code.

**PHPStan**

```
$ vendor/bin/phpstan analyse
```

**PHP\_CodeSniffer with error detection**

```
$ vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp app
```

**PHP\_CodeSniffer with error fixing**

```
$ vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp app
```

Web Application Usage
---------------------

[](#web-application-usage)

All use-cases require logging in first. Next sections will assume you are already logged in to the system.

### Creating recipient data

[](#creating-recipient-data)

It is important to first create some recipient data, since you cannot send a mailing without a recipient group with at least one subscribed recipient.

1. Access the Groups section in the left sidebar
2. Create the Group you want to send the mailing to (e.g. Golf Players)
3. Now you have 2 choices:
    1. Import recipients to the created group using an Excel file
    2. Add recipients manually in the Recipients section and indicate the created group in their Recipient Groups field

### Creating mailings

[](#creating-mailings)

Now that we have some recipient data in the system, we can go ahead and start building a new mailing campaign.

1. Go to the Mailings section in the left sidebar and click on the Create Mailing button in the top-right corner
2. In the editor, proceed as follows:
    1. Click on the pencil icon in the top-left corner of the screen and fill out the title, subject and the date of the mailing. Then indicate which Recipient Groups should receive the mailing.
    2. Click on the plus icon in the top-left corner of the screen and use the components to build your mailing template.
3. (Optional) You can view the preview of your progress by clicking the Preview button in the top-right corner of the screen.
4. Once you are finished building the template, you can click the Back button and return to the Mailing datagrid.
5. Now you are ready to set the status of your newly created mailing to Ready. Based on the date that was set in the mailing editor, the system will automatically send the mailing once the date is reached (the crontab should ideally run every minute)

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 96.6% of commits — single point of failure

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

Unknown

Total

1

Last Release

1830d ago

### Community

Maintainers

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

---

Top Contributors

[![jvitasek](https://avatars.githubusercontent.com/u/8986306?v=4)](https://github.com/jvitasek "jvitasek (85 commits)")[![marekvyroubal](https://avatars.githubusercontent.com/u/8974580?v=4)](https://github.com/marekvyroubal "marekvyroubal (3 commits)")

---

Tags

doctrine-ormmailingnette-frameworknewslettervuejsvuexdoctrinenewslettermailingVue.jsNette Framework

###  Code Quality

TestsCodeception

### Embed Badge

![Health badge](/badges/jvitasek-nwsltr/health.svg)

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

PHPackages © 2026

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