wake-up-neo.net

Wie passen Sie die E-Mail-Bestätigungs-E-Mail von Laravel 5.7 an?

Ich habe gerade ein Upgrade auf Laravel 5.7 durchgeführt und verwende jetzt die integrierte E-Mail-Bestätigung. Es gibt jedoch zwei Dinge, die ich nicht herausfinden konnte, und das Hauptproblem ist, wie kann ich die E-Mail anpassen, die zum Überprüfen der E-Mail an den Benutzer gesendet wird? Ich kann auch nicht herausfinden, wie ich das Senden dieser E-Mail einleiten soll, wenn die Benutzer ihre E-Mail ändern, aber ich kann sie für einen anderen Thread speichern.

10
Wayne Fulcher

Wenn Sie die E-Mail-Bestätigung in Laravel 5.7 hinzufügen möchten, empfiehlt es sich, Illuminate\Contracts\Auth\MustVerifyEmail zu implementieren und die Illuminate\Auth\MustVerifyEmail-Eigenschaft des App\User-Modells zu verwenden.

Um ein benutzerdefiniertes Verhalten vorzunehmen, können Sie die Methode sendEmailVerificationNotification überschreiben. Diese Methode benachrichtigt den erstellten Benutzer durch Aufrufen der Methode notify und übergibt eine neue Instanz der Klasse Notifications\MustVerifyEmail als Parameter.

Sie können eine benutzerdefinierte Benachrichtigung erstellen, die als Parameter an die $this->notify() innerhalb der sendEmailVerificationNotification-Methode in Ihrem Benutzermodell übergeben wird:

public function sendEmailVerificationNotification()
{
    $this->notify(new App\Notifications\CustomVerifyEmail);
}

... dann können Sie in Ihrer CustomVerifyEmail-Benachrichtigung festlegen, wie die Überprüfung durchgeführt wird. Sie können den erstellten Benutzer benachrichtigen, indem Sie eine E-Mail mit einer benutzerdefinierten notification.route senden, die alle gewünschten Parameter übernimmt.

Benachrichtigungsprozess für E-Mail-Bestätigung

Wenn ein neuer Benutzer sich anmeldet, wird ein Illuminate\Auth\Events\Registered-Ereignis im App\Http\Controllers\Auth\RegisterController ausgegeben, und dieses Registered-Ereignis verfügt über einen Listener mit dem Namen Illuminate\Auth\Listeners\SendEmailVerificationNotification, der im App\Providers\EventServiceProvider registriert ist:

protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,
    ]
];

Der Listener SendEmailVerificationNotification prüft, ob der $ user - der in der Laravel-Standardauthentifizierung App\Http\Controllers\Auth\RegisterController als Parameter an new Registered($user = $this->create($request->all())) übergeben wird - eine Instanz von Illuminate\Contracts\Auth\MustVerifyEmail ist. Dies ist der Name der Eigenschaft, die Laravel im App\User-Modell vorschlägt, wenn Sie es bereitstellen möchten Standard-E-Mail-Bestätigung und prüfen, ob $user noch nicht verifiziert ist. Wenn dies alles passiert, wird die sendEmailVerificationNotification-Methode für diesen Benutzer aufgerufen:

if ($event->user instanceof MustVerifyEmail && !$event->user->hasVerifiedEmail())   {
    $event->user->sendEmailVerificationNotification();
}
6
Yves Kipondo

Ich denke, der einfachste Weg, dies zu tun, besteht darin, eine neue Benachrichtigung mit den Dokumenten hier vorzunehmen: https://laravel.com/docs/5.7/notifications#creating-notifications

Dann überschreiben Sie die Funktion:

public function sendEmailVerificationNotification()
{
    $this->notify(new App\Notifications\CustomEmailNotification);
}

Im Benutzermodell.

Oder du kannst 

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

Dadurch werden die Vorlagen in das Verzeichnis resources/views/vendor/Notifications kopiert und Sie können sie dort ändern

3
Andrew Earls

Für einen schnellen und einfachen Weg: 

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

Es erstellt eine neue Datei in: 

\resources\views\vendor\notifications

Dies ist Larawels Email-Platte. Sie können es ändern und anpassen.

2
Tolga

Navigieren Sie zu diesen Dateien

  • vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php

  • vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php

und dann anpassen ... Sie können sogar einen Konstruktor in vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php .__ einführen und den Wert durch vendor/laravel/framework/src/übergeben. Illuminate/Auth/MustVerifyEmail.php

z.B:  Created my own constructor  Utilized the user array values passed to the constructor  Passing the constructor value from the

0

Aufbauend auf der Antwort von Andrew Earls können Sie mit diesem Befehl auch alle von der Anwendung verwendeten Markdown-E-Mail-Komponenten veröffentlichen: 

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

Sobald dies erledigt ist, haben Sie eine Reihe von HTML- und Markdown-Dateien, die Sie in resources/views/vendor/mail ändern können. Auf diese Weise können Sie das gesamte E-Mail-Layout ändern und das CSS gestalten. Ich würde dringend empfehlen, die Mail-Dokumente gut zu lesen - Anpassen der Komponenten .

CSS-Theming

Als allgemeine E-Mail-Kurzanleitung (Laravel 5.7) können Sie: 

  1. Veröffentlichen Sie das Design mit php artisan vendor:publish --tag=laravel-mail.
  2. Kopieren Sie resources/views/vendor/mail/html/themes/default.css in Ihre eigene Datei. z. B. resources/views/vendor/mail/html/themes/wayne.css
  3. Bearbeiten Sie config/mail.php und ändern Sie 'theme' => 'default' in 'theme' => 'wayne'.
  4. Bearbeiten Sie wayne.css, um Ihre E-Mails neu zu gestalten.

Hoffe das hilft jemandem. 

0

Um eine Bestätigungs-E-Mail zu senden, können Sie einfach den folgenden Code verwenden:

 // send new verification email to user
 $user->sendEmailVerificationNotification();
0
Taras Chernata

Leider ist diese E-Mail, die versendet wird, nicht aus einer "Ansicht", es ist eine Notification, die eigentlich inline gebaut wird. Hier wird es derzeit erstellt, wenn es gesendet werden muss: Illuminate\Auth\Notifications\[email protected]. Diese bestimmte Klasse verfügt über einen statischen Rückruf, der festgelegt werden kann, um diese E-Mail zu erstellen, anstatt sie zuzulassen.

In einem Service Provider in der boot-Methode müssen Sie dieser Klasse einen Rückruf zuweisen:

Etwas "wie" könnte funktionieren:

public function boot()
{
    \Illuminate\Auth\Notifications\VerifyEmail::toMailUsing(function ($notifiable) {

        // this is what is currently being done
        // adjust for your needs

        return (new \Illuminate\Notifications\Messages\MailMessage)
            ->subject(\Lang::getFromJson('Verify Email Address'))
            ->line(\Lang::getFromJson('Please click the button below to verify your email address.'))
            ->action(
                \Lang::getFromJson('Verify Email Address'),
                $this->verificationUrl($notifiable)
            )
            ->line(\Lang::getFromJson('If you did not create an account, no further action is required.'));

    });
}

Da dies eine Benachrichtigung ist, sollten Sie weitere Optionen zum Anpassen haben.

Wenn Sie Ihre eigene Notification-Klasse verwenden möchten, können Sie die sendEmailVerificationNotification-Methode im User (Authenticatable) -Modell überschreiben (dies ist aus dem Merkmal MustVerifyEmail).

Zweite Frage:

Die VerificationController (App\Http\Controllers\Auth\VerificationController), die Sie verwenden sollten, verfügt über eine Methode mit dem Namen resend (aus dem Merkmal VerifiesEmails), die für diesen Zweck als guter Kandidat erscheint.

Sie sollten Routen für diese Verifizierungsrouten über Auth::routes(['verify' => true]); einrichten.

Hinweis:

Das Verifikationssystem verwendet ein Feld in der users-Tabelle email_verified_at in 5.7, um dies zu markieren. Sie möchten sicherstellen, dass Sie dieses Feld haben. Wenn der Benutzer die E-Mail-Adresse ändert, können Sie diese null ändern und dann auf die resend-Route umleiten, um die neue Bestätigung zu senden. Dies versetzt sie jedoch in einen "ungeprüften" Zustand, bis sie sich erneut verifizieren, wenn dies der Fall ist.

Update:

Anscheinend waren wir auf dem richtigen Weg. Ich habe diese SO Antwort gefunden, die über ähnliche Dinge geht:

Ändern des Standardfelds "Betreff" für die Bestätigungs-E-Mail in laravel 5.7

0
lagbox