dansmaculotte / laravel-newsletter
Manage newsletters in Laravel
Installs: 2 689
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 235
Open Issues: 0
Requires
- php: ^8.1
- illuminate/support: ^9.0
Requires (Dev)
- drewm/mailchimp-api: ^2.4
- mailjet/mailjet-apiv3-php: ^1.4
- mockery/mockery: ^1.3
- orchestra/testbench: ^7.1
- phpunit/phpunit: ^8.5||^9.1
Suggests
- drewm/mailchimp-api: Required for using laravel-newsletter via Mailchimp
- mailjet/mailjet-apiv3-php: Required for using laravel-newsletter via Mailjet
README
This package is a fork from spatie/laravel-newsletter. It provides an easy way to integrate different email services with Laravel.
There are 2 drivers available:
There is also and log
and null
driver for testing and debug purpose.
Installation
You can install this package via composer using:
composer require dansmaculotte/laravel-newsletter
The package will automatically register itself.
To publish the config file to config/newsletter.php
run:
php artisan vendor:publish --provider="DansMaCulotte\Newsletter\NewsletterServiceProvider"
This will publish a file newsletter.php
in your config directory.
Finally, install the email service package needed:
- Mailchimp
composer require drewm/mailchimp-api
- Mailjet
composer require mailjet/mailjet-apiv3-php
Usage
Configure your mail template driver and credentials in config/newsletter.php
.
After you've installed the package and filled in the values in the config-file working with this package will be a breeze. All the following examples use the facade. Don't forget to import it at the top of your file.
use Newsletter;
Subscribing, updating and unsubscribing
Subscribing an email address can be done like this:
use Newsletter; Newsletter::subscribe('rincewind@discworld.com');
Add add email address to list but excluded from marketing emails
use Newsletter; Newsletter::addMember('rincewind@discworld.com');
Let's unsubscribe someone:
Newsletter::unsubscribe('the.luggage@discworld.com');
You can pass options as the second argument:
Newsletter::subscribe('rincewind@discworld.com', ['FNAME' => 'Rince', 'LNAME' => 'Wind']);
You can subscribe someone to a specific list by using the third argument:
Newsletter::subscribe('rincewind@discworld.com', ['FNAME' => 'Rince', 'LNAME' => 'Wind'], 'subscribers');
That third argument is the name of a list you configured in the config file.
You can also subscribe and/or update someone. The person will be subscribed or updated if he/she is already subscribed:
Newsletter::subscribeOrUpdate('rincewind@discworld.com', ['FNAME' => 'Foo', 'lastname' => 'Bar']);
You can also unsubscribe someone from a specific list:
Newsletter::unsubscribe('rincewind@discworld.com', 'subscribers');
Deleting subscribers
Deleting is not the same as unsubscribing. Unlike unsubscribing, deleting a member will result in the loss of all history (add/opt-in/edits) as well as removing them from the list. In most cases you want to use unsubscribe
instead of delete
.
Here's how to perform a delete:
Newsletter::delete('rincewind@discworld.com');
Getting subscriber info
You can get information on a subscriber by using the getMember
function:
Newsletter::getMember('lord.vetinari@discworld.com');
This will return an array with information on the subscriber. If there's no one subscribed with that
e-mail address the function will return false
There's also a convenience method to check if someone is already subscribed:
Newsletter::hasMember('nanny.ogg@discworld.com'); //returns a boolean
In addition to this you can also check if a user is subscribed to your list:
Newsletter::isSubscribed('lord.vetinari@discworld.com'); //returns a boolean
Handling errors
If something went wrong you can get the last error with:
Newsletter::getLastError();
Need something else?
If you need more functionality you get an instance of the underlying Api with:
$api = Newsletter::getApi();
Mailjet notes
Connection timeouts may occur when using mailjet, as described
here. You can
configure the value you want with configuration key
mailjet.connection_timeout
, itself using environment variable
MJ_CONNECTION_TIMEOUT
.
Testing
Run the tests with:
vendor/bin/phpunit
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
License
The MIT License (MIT). Please see License File for more information.