In this tutorial, we will see how to use newsletter in laravel.



Step 1 : Install Laravel App


Open terminal and run this command:

composer create-project --prefer-dist laravel/laravel blog



Step 2 : Setup Database Configuration


open ".env" file and change the database name, username and password in the env file.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Enter_Your_Database_Name
DB_USERNAME=Enter_Your_Database_Username
DB_PASSWORD=Enter_Your_Database_Password



Step 3: Install Newsletter Package


composer require spatie/laravel-newsletter

The package will automatically register itself.

php artisan vendor:publish --provider="Spatie\Newsletter\NewsletterServiceProvider"



Step 4: Sign Up in MailChimp Get MailChimp API Key And List Id


sign up in MailChimp from https://mailchimp.com/. 



Step 5: SignSet MailChimp API Key And List Id in .env file


update the Mailchimp API key and list id in.env file:

MAILCHIMP_APIKEY=xxxx 
MAILCHIMP_LIST_ID=xxxx 



Step 6: Create Route


routes/web.php

Route::get('newsletter','NewsletterController@index');
Route::post('newsletter/store','NewsletterController@store');



Step 7: Create Controller


 new controller as NewsletterController and run this command below:

php artisan make:controller NewsletterController

After successfully running the above command

app/http/controller/NewsletterController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Newsletter;

class NewsletterController extends Controller
{
    public function index()
    {
        return view('newsletter');
    }

    public function store(Request $request)
    {
        if ( ! Newsletter::isSubscribed($request->email) ) 
        {
            Newsletter::subscribePending($request->email);
            return redirect('newsletter')->with('success', 'Thanks For Subscribe');
        }
        return redirect('newsletter')->with('failure', 'Sorry! You have already subscribed ');
            
    }
}



Step 8: Create Blade File


/resources/views/newsletter.blade.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel  Newsletter Tutorial With Example</title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">  
  </head>
  <body>
    <div class="container">
    @if (\Session::has('success'))
      <div class="alert alert-success">
        <p>{{ \Session::get('success') }}</p>
      </div><br />
     @endif
     @if (\Session::has('failure'))
      <div class="alert alert-danger">
        <p>{{ \Session::get('failure') }}</p>
      </div><br />
     @endif
      <h2 class="mb-2 mt-2">Laravel Newsletter Tutorial With Example</h2>
      <form method="post" action="{{url('newsletter/store')}}">
        @csrf
        </div>
        <div class="row">
          <div class="col-md-8"></div>
            <div class="form-group col-md-2">
              <label for="Email">Email:</label>
              <input type="text" class="form-control" name="email">
            </div>
          </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <button type="submit" class="btn btn-success">Submit</button>
          </div>
        </div>
      </form>
    </div>
  </body>
</html>

Run this quick run command:

php artisan serve

Open this URL in your browser:

http://localhost:8000/newsletter


I hope this example helps you.