With several fantastic extension out there, integrating a Mailchimp email subscription form in Laravel has never been easier!
I am going to show you an example integration that collects an email address in a simple form. We will be using the laravel-newsletter package by spatie.
Assumptions
- You have a Laravel application already running
- You have a Mailchimp account
- You have a basic understanding of Laravel
Step One: Include the spatie/laravel-newsletter package
Include the spatie/laravel-newsletter package in your project with
composer require spatie/laravel-newsletter
This package contains a very easy to use set of methods to control all aspects of your subscribers and user management. In this tutorial we will only be using the subscribe functionality.
Step Two: Configuration
The default configuration file will be generated with
php artisan vendor:publish --provider="Spatie\Newsletter\NewsletterServiceProvider"
A file will be created at config/newsletter.php. In this file are a set of variables that will be needed in the .env file.
- MAILCHIMP_APIKEY – Find it at https://us10.admin.mailchimp.com/account/api-key-popup
- MAILCHIMP_LIST_ID – Find it with http://kb.mailchimp.com/lists/managing-subscribers/find-your-list-id
Step Three: Create the Controller
A Controller will be used to send off the subscriber’s email to the Mailchimp service. Other tutorials on form submission will also include a Model and Migration here. I am choosing to skip that since we are not putting data into a database, but rather are acting as a passthrough.
php artisan make:controller Subscriber
The controller file will be created at app/Http/Controllers/Subscriber.php
Add a method called addSubscriber
public function addSubscriber( Request $request ) { $validatedData = $request->validate([ 'email' => 'required|email', ]); // Do additional validation and security checks here.... // Sign up the user! Newsletter::subscribePending( $validatedData['email'] ); if( Newsletter::lastActionSucceeded() ) { $status = json_encode( [ 'success' => true, 'message' => 'You have been added to the list! Please check your email to confirm.' ] ); } else { $status = json_encode( [ 'success' => false, 'message' => 'There was an issue adding you to the list! Please try again or contact the admin.', 'error' => Newsletter::getLastError() ] ); } return $status; }
Step Four: Update routes
Next you will need to update your routes file to add the new endpoint. Do this in routes/web.php
Route::get('subscriber/add’, 'Subscriber@addSubscriber');
If you are building this into an API you can use the routes/api.php file.
Step Five: Wire up your form
This is the final step to world domination!…. or at least having your subscription form ready for prime time. Simply wire up your form to use this new endpoint. I am going to assume that you know how to handle html forms here 😉
Step Six: Final Testing
Because we set this up as a GET query, testing is as simple as passing the email query parameter. Submit an email and see it populate in your Mailchimp account!
Step Seven: Drink Scotch
The final and most important step!