Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

zamdev's avatar

Laravel-newsletter seems to work, but not add to list

I had got problems with laravel-newsletter, it just didn't work. One time I received email, confirmed, but it is not visible on Mailchimp list... So, it is like, laravel-newsletter doesn't work. Please check my code and help me figure out what I have made wrong:

Controller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Newsletter;

class NewsletterController extends Controller
{
    public function store(Request $request) {

        if(! Newsletter::isSubscribed($request->email)){

            Newsletter::subscribePending($request->email);

            return redirect('/')->with('success', 'Thanks! Check your email to accept newsletter!');
        }

        return redirect('/')->with('failure', 'Yeah, you are already our subscriber!');
    }
}

Blade:

<div class="newsletter">
                    @if (session('success'))
                        <div class="success">
                            {{ session('success') }}
                        </div>
                    @endif

                    @if (session('failure'))
                        <div class="failure">
                            {{ session('failure') }}
                        </div>
                    @endif
                    <div class="newsletter-box">
                        <form action="{{ url('/newsletter') }}" method="post">
                            {{ csrf_field() }}
                            <p>Get special job offers for you and much more!</p>
                            <div class="newsletter-content">
                                <div class="newsletter-group"><input type="email" name="email" placeholder="Your e-mail"></div>
                                <div class="newsletter-group"><input value="Subscribe" type="submit"></div>
                            </div>
                        </form>
                    </div>
                    <p class="spam">No spam. Only valuable stuff guaranteed.</p>
                </div>

Route:

Route::post('/newsletter', 'NewsletterController@store')->name('store');

ENV:

MAILCHIMP_APIKEY=xxx
MAILCHIMP_LIST_ID=yyy

When I type email and click "Subscribe", I get success: "Thanks! Check your email to accept newsletter!" but when I leave input blank and click "Subscribe", it shows error: Type error: Argument 1 passed to Spatie\Newsletter\Newsletter::isSubscribed() must be of the type string, null given

Please help me.

0 likes
9 replies
D9705996's avatar

You need to validate your request data as $request->email will be null if you don't supply a value.

Newsletter::isSubscribed($request->email)

https://laravel.com/docs/5.7/validation

You can do something like the below at the top of your store method to prevent passing invalid data to the Newsletter function.

    $validatedData = $request->validate([
        'email' => 'required|email',
    ]);
zamdev's avatar

@D9705996 - Thanks, it works. When input is empty, it just reload website.

How can I add message like when I don't supply value?

zamdev's avatar

@D9705996 - Ok, thanks. I handle errors like "The email field is required"

BUT

problem is that it shows success - "Thanks! Check your email to accept newsletter!", but no email from Mailchimp arrive.

Where is the problem? Mailchimps API and List ID are good for sure.

D9705996's avatar

problem is that it shows success - "Thanks! Check your email to accept newsletter!", but no email from Mailchimp arrive.

Is this when you provide a valid email?

1 like
zamdev's avatar

@D9705996 - Strange, but it started working on localhost.

When testing on production I get error after submit: Class 'Spatie\Newsletter\NewsletterFacade' not found Strange.

D9705996's avatar
D9705996
Best Answer
Level 51

Did you run composer install on your production environment?

1 like
zamdev's avatar

@D9705996 - It works. 0 errors, now waiting for email.

Please, could you tell me when to know if it is necessary to run any commends like this? Also when to run php artisan cache:clear etc.? Is there any list when and which commends should I run?

Thank you!

Please or to participate in this conversation.