Laravel Notifications per Mail versenden

Mit Laravel kann man Benutzern direkt Notifications per E-Mail senden. Wie das funktioniert, erfahren Sie in diesem Artikel.

Zum Thema Laravel Notifications haben wir auch einen Artikel zu Notifications in Rocket.Chat versenden veröffentlicht, welchen Sie hier finden können.

Mailtrap & SMTP Konfiguration

Zum Testen verwenden wir mailtrap.io. Wie der Name es schon suggeriert, werden alle Mails direkt abgefangen. Diese werden dann in einem Postfach gebündelt angezeigt.

Innerhalb des Postfaches gehen wir auf SMTP Settings und wählen im Dropdown direkt Laravel aus. Die richtigen Einstellungen werden angezeigt und können in die .env eingetragen werden.

Erstellung Notification & Controller

php artisan make:notification AlarmNotification
php artisan make:controller NotificationController

Im NotificationController erstellen wir eine Test Funktion und inkludieren die AlarmNotification, damit wir diese auch ansprechen können.

<?php

namespace App\Http\Controllers;

use App\Notifications\AlarmNotification;

class NotificationController extends Controller
{
    public function test()
    {
        // testing notification
    }
}

In der Test Funktion erstellen wir uns die NotificationData die wir versenden möchten.

$notificationData = [
    'message' => 'Test Notification',
    'actionLink' => 'https://admin-code.de'
    'actionText' => 'Click here'
];

Damit wir die Notification versenden können, benötigen wir noch einen Zielbenutzer. Über „notify“ können wir ihm dann die Notification mit notificationData schicken.

$user = User::first();

$user->notify(new AlarmNotification($notificationData));

Damit das auch funktioniert, müssen innerhalb des User Models Notifications erlaubt sein.
Dies sollte standardmäßig bereits der Fall sein – trotzdem sollte folgendes kontrolliert werden:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
use Illuminate\Database\Eloquent\SoftDeletes;



class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

An diesem Punkt können wir die Notification bereits testen.

// api.php

use App\Http\Controllers\NotificationController;

Route::get('notification-test', [NotificationController::class, 'test']);

Über Postman können wir nun die API aufrufen und etwaige Fehler analysieren.

Möglicher Fehler beim Versenden der Mail:

stream_socket_client(): php_network_getaddresses: getaddrinfo for mailhog failed: No such host is known.

Lösung:

php artisan cache:clear
php artisan config:clear

Konfiguration der Notification

Am Anfang der Notification Class deklarieren wir die notificationData als private.

class AlarmNotification extends Notification
{
    use Queueable;
    private $notificationData;

Und schreiben diese mit in den Constructor

public function __construct($notificationData)
    {
        $this->notificationData = $notificationData;
    }

Nun können wir die Informationen, die wir im Controller an die Notification weitergegeben haben, hier auch verwenden. In der toMail Funktion wird der Text der Mail definiert.

public function toMail($notifiable)
    {
        return (new MailMessage)
	    ->line($this->notificationData['message'])
	    ->action(
	        $this->notificationData['actionText'],
	        $this->notificationData['actionLink']
	    )
    }

Aussehen der Laravel Notification ändern

Die Templates, die von Laravel verwendet werden um Notifications zu versenden, können mit diesen beiden Commands in den resources Ordner verschoben und anschließend bearbeitet werden:

php artisan vendor:publish --tag=laravel-mail
php artisan vendor:publish --tag=laravel-notifications

Nun können wir zum Beispiel das Logo im Header der Notification verändern:

Dazu einfach in der resources/views/vendor/mail/html/header.blade.php den Link austauschen. Dabei nicht vergessen, in der CSS Datei die Breiten- und Höhenangaben zu bearbeiten.

Weitere Informationen und Meta Daten in Laravel Notification

Neben Linien und einem Action Button kann man noch weitere Infos an die Notification weitergeben.

->level()

Verändert Farben des Action Buttons und Anrede, wenn keine gesetzt ist

->subject()

Betreff der E-Mail

->from()

Absender der E-Mail

->replyTo()

E-Mail Adresse für Antworten

->priority()

Priorität der E-Mail, 1-5, 1 ist das Höchste

->greeting()

Anrede

->line()

Text in der Mail, kann auch mehrmals per For-Loop verwendet werden

->salutation()

Gruß zum Abschied

Mehr Methoden können Sie in der offiziellen Dokumentation nachschlagen.

Sollten Sie noch Fragen haben oder eine Beratung wünschen, können Sie gerne mit uns Kontakt aufnehmen oder unsere Webseite besuchen.

Gerne können Sie hier auch andere Artikel zum Thema Laravel anschauen.