Laravelでは、ユーザーに対してメールアドレスを確認するメールを送信することができます。
ユーザーの登録に関しては、以下をご覧ください。
今回は、メールアドレスを確認するメールをカスタマイズする方法です。
通知を行うクラスを作成
以下のコマンドでCustomVerifyEmailクラスを作成します。
今回はメールのテンプレートをMarkdownで書ける機能を利用するので、「–markdown」オプションを付与して、Markdownテンプレートも一緒に作成します。
php artisan make:notification CustomVerifyEmail --markdown=emails.verify_email
以下のファイルが作成されます。
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class CustomVerifyEmail extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)->markdown('emails.verify_email');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
@component('mail::message')
# Introduction
The body of your message.
@component('mail::button', ['url' => ''])
Button Text
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
「CustomVerifyEmail.php」は以下のように変更します。
メールアドレス確認の機能は、既存で「VerifyEmail」クラスに用意されているので、継承先を「VerifyEmail」に変更しています。
メール通知を行うには、以下のようにtoMailメソッドを定義します。
<?php
namespace App\Notifications;
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Lang;
class CustomVerifyEmail extends VerifyEmail
{
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$verificationUrl = $this->verificationUrl($notifiable);
return (new MailMessage)
->subject(Lang::get('Verify Email Address'))
->markdown('emails.verify_email', [
'verify_url' => $verificationUrl
]);
}
}
メールアドレスの確認メールを送信する際に、上記で作成したクラスを使用するようにします。
「app/Models/User.php」で、sendEmailVerificationNotificationメソッドをオーバーライドします。
use App\Notifications\CustomVerifyEmail;
…
(省略)
…
class User extends Authenticatable implements MustVerifyEmail
{
public function sendEmailVerificationNotification()
{
$this->notify(new CustomVerifyEmail());
}
}
これでメールを送信すると以下のように送信されます。
Markdownメールをカスタマイズ
以下のようにカスタマイズしてみます。
Markdownで書けたり、色々と用意されているコンポーネントがあります。
@component('mail::message')
# ご登録ありがとうございます
この度はご登録いただき、ありがとうございます。<br>
ご登録を続けるには、以下のボタンをクリックしてください。
@component('mail::button', ['url' => $verify_url])
ご登録を続ける
@endcomponent
何かご不明点などがありましたら、下記よりお問い合わせください。<br>
[{{ url('contact') }}]({{ url('contact') }})
※こちらのメールは送信専用のメールアドレスより送信しております。恐れ入りますが、直接ご返信しないようお願いいたします。
{{ config('app.name') }}
@endcomponent
これでメールを送信すると以下のように送信されます。
▼通知に関しての詳細は、以下のドキュメントをご覧ください。
https://readouble.com/laravel/9.x/ja/notifications.html