- Schlüssel zur Rettung: Extrahieren und Sichern von Codemagic Secure Variables - 26. Oktober 2023
- Effektives Zeitmanagement für Entwickler: Praktische Strategien - 13. September 2023
- Teil 2: Elasticsearch und FSCrawler in Laravel - 6. April 2023
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.