Я только что обновился до Laravel 5.7, и теперь я использую встроенную проверку электронной почты. Однако есть две вещи, которые я не смог понять, и основная проблема заключается в том, как я могу настроить электронную почту, отправляемую пользователю для проверки их электронной почты? Я также не могу понять, как инициировать отправку этого сообщения, если пользователи меняют свой адрес электронной почты, но я могу сохранить его для другого потока.
Как настроить электронную почту для проверки электронной почты от Laravel 5.7?
Ответ 1
Если вы хотите добавить проверку электронной почты в Laravel 5.7, рекомендуется использовать Illuminate\Contracts\Auth\MustVerifyEmail
и использовать черту Illuminate\Auth\MustVerifyEmail
в App\User
Model.
Чтобы настроить пользовательское поведение, вы можете переопределить метод sendEmailVerificationNotification
который является методом, который уведомляет созданного пользователя, вызывая метод notify
, и передает в качестве параметра новый экземпляр класса Notifications\MustVerifyEmail
.
Вы можете создать пользовательское Уведомление, которое будет передаваться в качестве параметра в $this->notify()
в методе sendEmailVerificationNotification вашей пользовательской модели:
public function sendEmailVerificationNotification()
{
$this->notify(new App\Notifications\CustomVerifyEmail);
}
... затем в своем уведомлении CustomVerifyEmail
вы можете определить способ обработки проверки. Вы можете оповестить созданного пользователя, отправив электронное письмо с пользовательским validation.route, который будет принимать любые параметры, которые вы хотите.
Процесс уведомления по электронной почте
Когда новый пользователь Illuminate\Auth\Events\Registered
событие Illuminate\Auth\Events\Registered
отправляется в App\Http\Controllers\Auth\RegisterController
и это Registered
событие имеет прослушиватель с именем Illuminate\Auth\Listeners\SendEmailVerificationNotification
который зарегистрирован в App\Providers\EventServiceProvider
:
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
]
];
SendEmailVerificationNotification
проверяет, SendEmailVerificationNotification
ли $ user - который передается в качестве параметра new Registered($user = $this->create($request->all()))
в App\Http\Controllers\Auth\RegisterController
аутентификации Laravel по умолчанию App\Http\Controllers\Auth\RegisterController
- это экземпляр Illuminate\Contracts\Auth\MustVerifyEmail
который является именем признака, который, как предлагает Laravel, используется в App\User
Model, когда вы хотите предоставить проверку электронной почты по умолчанию, а также проверить, что $user
еще не проверен. Если все это проходит, метод sendEmailVerificationNotification
вызывается для этого пользователя:
if ($event->user instanceof MustVerifyEmail && !$event->user->hasVerifiedEmail()) {
$event->user->sendEmailVerificationNotification();
}
Ответ 2
Я думаю, что простой способ сделать это состоит в том, чтобы сделать новое уведомление, используя документы здесь: 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, и вы можете изменить их там
Ответ 3
Для быстрого и простого способа:
php artisan vendor:publish --tag=laravel-notifications
Это создает новый файл в:
\resources\views\vendor\notifications
Это электронная почта Laravel. Вы можете изменить и настроить его.
Ответ 4
К сожалению, это письмо отправлено не из "представления", а Notification
, которое встроено в строку. Здесь он Illuminate\Auth\Notifications\[email protected]
при необходимости отправки: Illuminate\Auth\Notifications\[email protected]
. Этот конкретный класс имеет статический обратный вызов, который можно настроить для создания этого письма вместо того, чтобы позволить ему это сделать.
В Провайдере в методе 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
).
Второй вопрос:
У 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
Ответ 5
Немного опираясь на ответ Эндрю Эрлса, вы также можете опубликовать все компоненты почтовой рассылки, используемые приложением, с помощью этой команды:
php artisan vendor:publish --tag=laravel-mail
Как только это будет сделано, у вас будет ряд html файлов и файлов разметки для изменения в resources/views/vendor/mail
. Это позволит вам изменить общий макет электронной почты, а также "тему" CSS. Я очень рекомендую внимательно прочитать Документы по почте - Настройка компонентов.
CSS тематика
В качестве общего краткого руководства по электронной почте (Laravel 5.7) вы можете:
- Опубликуйте тему с помощью
php artisan vendor:publish --tag=laravel-mail
. - Скопируйте
resources/views/vendor/mail/html/themes/default.css
в свой собственный файл. напримерresources/views/vendor/mail/html/themes/wayne.css
- Отредактируйте
config/mail.php
и там, где вы видите'theme' => 'default'
измените его на'theme' => 'wayne'
- Отредактируйте
wayne.css
чтобы изменить ваши электронные письма.
Надеюсь, что это помогает кому-то.
Ответ 6
Чтобы отправить письмо с подтверждением, вы можете использовать следующий код:
// send new verification email to user
$user->sendEmailVerificationNotification();
Ответ 7
Перейдите к этим файлам
vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php
vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php
а затем настроить его. Вы даже можете ввести конструктор в продавец/Laravel/рамки /SRC/Осветите /Auth/Уведомления /VerifyEmail.php и передать значение через vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php