Laravel is one of the most popular PHP Framework. Today we are going to talk about its built in Email Notification functionality. We are using make:notification artisan command to create notification. The Notification only available on Laravel 5.3.x and above. I am using Laravel 5.7.x and hope this will works with the supported versions too.
Generate Notification
If you haven’t set up your project yet, then follow this official documentation like to set up your project.
Creating Notification is very simple with the handy command.
php artisan make:notification WelcomeNotification
The above command will create a folder Notifications in app directory app/Notifications/WelcomeNotification.php.
Laravel Notification supports various features like sending email, SMS, Slack etc. We are not going to discuss all of these features in this post. We are going to customize its default email template, specially header and footer.
Customize Markdown Email Header and Footer
Email notification header and footer changes with APP_NAME configuration. Find .env file in your projects root directory that has this APP_NAME parameter with the value Laravel. Lets change it to the Mailing App instead of Laravel.
If we change the APP_NAME like the above, the output of the email should be like the below image.
But this is not what we want! We want to set the Logo on the email header section and Support Team of something else on the footer.
Laravel provides a more better way to customize the email notification more robust. Let’s digging it more deeper.
php artisan vendor:publish --tag=laravel-mail
The above command will publish the Markdown mail components to resources/views/vendor/mail.
Now open the file message.blade.php from resources/views/vendor/mail/html/messages.blade.php
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
{{ config('app.name') }}
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
@endcomponent
The above file contains the header and footer slots that you can modify according to your need. If you want to set the logo on the Markdown email template then modify this block.
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
{{ config('app.name') }}
@endcomponent
@endslot
Replace {{ config(‘app.name’) }} with img tag and set the logo here.
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
But here is one thing to notice about the footer. This footer slot only modifies the very bottom section on the footer. Not the Regards one.
So what we have to do to change the Regards section? Run the following command.
php artisan vendor:publish --tag=laravel-notifications
The above command will generate another directory notifications on resources/views/vendor/. Now open email.blade.php from the notifications directory.
@component('mail::message')
{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level === 'error')
# @lang('Whoops!')
@else
# @lang('Hello!')
@endif
@endif
{{-- Intro Lines --}}
@foreach ($introLines as $line)
{{ $line }}
@endforeach
{{-- Action Button --}}
@isset($actionText)
<?php
switch ($level) {
case 'success':
case 'error':
$color = $level;
break;
default:
$color = 'primary';
}
?>
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
@endisset
{{-- Outro Lines --}}
@foreach ($outroLines as $line)
{{ $line }}
@endforeach
{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
@lang('Regards'),<br>{{ config('app.name') }}
@endif
{{-- Subcopy --}}
@isset($actionText)
@component('mail::subcopy')
@lang(
"If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
'into your web browser: [:actionURL](:actionURL)',
[
'actionText' => $actionText,
'actionURL' => $actionUrl,
]
)
@endcomponent
@endisset
@endcomponent
This file holds the Regards section and the Greeting section too. So if you want to set the Greeting from Hello! to Hi or something else, then you can change it from here.
So here is the Regards section that you can change according to your need.
{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
@lang('Regards'),<br>{{ config('app.name') }}
@endif