Как настроить электронную почту с подтверждением электронной почты от Laravel 5.7? - PullRequest
0 голосов
/ 20 сентября 2018

Я только что обновился до Laravel 5.7, и теперь я использую встроенную проверку электронной почты.Однако есть две вещи, которые я не смог выяснить, и основная проблема заключается в том, как я могу настроить электронную почту, которая отправляется пользователю для проверки его электронной почты?Я также не могу понять, как инициировать отправку этого электронного письма, если пользователи изменяют свое электронное письмо, но я могу сохранить его для другого потока.

Ответы [ 6 ]

0 голосов
/ 23 февраля 2019

Перейдите к этим файлам

  • vendor / laravel / framework / src / Подсветка / Auth / MustVerifyEmail.php

  • поставщик / laravel / framework / src / Подсветка / Аутентификация / Уведомления / VerifyEmail.php

изатем настройте его.Вы даже можете ввести конструктор в vendor / laravel / framework / src / Illuminate / Auth / Notifications / VerifyEmail.php и передать значение через vendor / laravel / framework / src / Illuminate / Auth / MustVerifyEmail.php

, например: Created my own constructor Utilized the user array values passed to the constructor Passing the constructor value from the

0 голосов
/ 31 декабря 2018

Для быстрого и простого способа:

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

Создается новый файл в:

\resources\views\vendor\notifications

Это электронная почта Laravel.Вы можете изменить и настроить его.

0 голосов
/ 19 декабря 2018

Немного опираясь на ответ Эндрю Эрлса, вы также можете опубликовать все компоненты почтовой рассылки, используемые приложением, с помощью этой команды:

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

Как только это будет сделано, выиметь ряд файлов HTML и уценки для изменения в resources/views/vendor/mail.Это позволит вам изменить общий макет электронной почты, а также «тему» ​​CSS.Я настоятельно рекомендую ознакомиться с Почтовыми документами - Настройка компонентов .

Темы CSS

Как общее руководство по отправке электронных писем (Laravel 5.7), вы можете:

  1. Опубликовать тему с помощью php artisan vendor:publish --tag=laravel-mail.
  2. Скопировать resources/views/vendor/mail/html/themes/default.css в свой собственный файл.например, resources/views/vendor/mail/html/themes/wayne.css
  3. Редактировать config/mail.php и там, где вы видите 'theme' => 'default', изменить его на 'theme' => 'wayne'
  4. Редактировать wayne.css, чтобы изменить стиль вашей электронной почты.

Надеюсь, что это помогает кому-то.

0 голосов
/ 06 декабря 2018

Я думаю, что простой способ сделать это - сделать новое уведомление, используя документы здесь: https://laravel.com/docs/5.7/notifications#creating-notifications

Затем переопределить функцию:

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

В модели пользователей.

Или вы можете

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

Это скопирует шаблоны в каталог resources / views / vendor / notifications и вы сможете изменить их там

0 голосов
/ 25 сентября 2018

Когда вы хотите добавить подтверждение по электронной почте в Laravel 5.7 , предлагается реализовать Illuminate\Contracts\Auth\MustVerifyEmail и использовать черту Illuminate\Auth\MustVerifyEmail в модели App\User.

.В некоторых пользовательских режимах вы можете переопределить метод sendEmailVerificationNotification, который уведомляет созданного пользователя, вызывая метод notify, и передает в качестве параметра новый экземпляр класса Notifications\MustVerifyEmail.

YouВы можете создать пользовательское Уведомление, которое будет передано в качестве параметра $this->notify() в методе sendEmailVerificationNotification вашей пользовательской модели:

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

... затем в вашем уведомлении CustomVerifyEmail вы можете определить способпроверка будет обработана.Вы можете уведомить созданного пользователя, отправив электронное письмо с пользовательским verify.route , который будет принимать любые параметры, которые вы хотите.

Процесс уведомления о подтверждении электронной почты

Когда новый пользователь регистрируется, событие Illuminate\Auth\Events\Registered отправляется в App\Http\Controllers\Auth\RegisterController, и это событие Registered имеет прослушиватель по имени Illuminate\Auth\Listeners\SendEmailVerificationNotification, который зарегистрирован в App\Providers\EventServiceProvider:

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

Слушатель SendEmailVerificationNotification проверяет, является ли $ user - который передается в качестве параметра new Registered($user = $this->create($request->all())) в аутентификации Laravel по умолчанию App\Http\Controllers\Auth\RegisterController - экземпляром Illuminate\Contracts\Auth\MustVerifyEmail, который является именем черты, которую предлагает Laravel:используется в модели App\User, если вы хотите предоставить подтверждение электронной почты по умолчанию, а также проверить, что $user еще не подтверждено.Если все это проходит, метод sendEmailVerificationNotification вызывается для этого пользователя:

if ($event->user instanceof MustVerifyEmail && !$event->user->hasVerifiedEmail())   {
    $event->user->sendEmailVerificationNotification();
}
0 голосов
/ 20 сентября 2018

К сожалению, это электронное письмо, отправленное не из «представления», это Notification, которое встроено на самом деле.Это где он в настоящее время построен, когда нужно отослать: Illuminate\Auth\Notifications\VerifyEmail@toMail.Этот конкретный класс имеет статический обратный вызов, который можно установить для создания этого электронного письма вместо того, чтобы позволить ему это делать.

В поставщике услуг в методе boot вам необходимо назначить обратный вызов для этого класса:

Что-то вроде этого может работать:

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.'));

    });
}

Поскольку это уведомление, у вас должно быть больше возможностей для его настройки.

Если вы хотите использовать свой собственный Notification класс, вы можете переопределить метод sendEmailVerificationNotification в модели User (Authenticatable) (это из черты MustVerifyEmail).

Второй вопрос:

The VerificationController (App\Http\Controllers\Auth\VerificationController) у вас должен быть метод с именем resend (из черты VerifiesEmails), который выглядит хорошим кандидатом для этой цели.

У вас должны быть настроены маршруты для этой проверкимаршруты через Auth::routes(['verify' => true]);

Примечание:

Система проверки использует поле в таблице users email_verified_at в 5.7, чтобы отметить это.Вы хотели бы убедиться, что у вас есть это поле.Когда пользователь меняет адрес электронной почты, я полагаю, вы могли бы сделать это null, а затем перенаправить его на маршрут resend, чтобы отослать новую проверку.Это переведет их в «непроверенное» состояние, пока они не будут переоценены, если это именно то, что вы намереваетесь случиться.

Обновление:

Кажется, мы спускалисьправильном пути.Я нашел этот SO-ответ, который касается похожих вещей:

Изменение поля по умолчанию «subject» для письма подтверждения в laravel 5.7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...