Laravel9でメールアドレス確認メールをカスタマイズする

Markdownメールをカスタマイズ Laravel

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メールをカスタマイズ

以下のようにカスタマイズしてみます。
Markdownで書けたり、色々と用意されているコンポーネントがあります。

@component('mail::message')
# ご登録ありがとうございます

この度はご登録いただき、ありがとうございます。<br>
ご登録を続けるには、以下のボタンをクリックしてください。

@component('mail::button', ['url' => $verify_url])
ご登録を続ける
@endcomponent

何かご不明点などがありましたら、下記よりお問い合わせください。<br>
[{{ url('contact') }}]({{ url('contact') }})

※こちらのメールは送信専用のメールアドレスより送信しております。恐れ入りますが、直接ご返信しないようお願いいたします。

{{ config('app.name') }}
@endcomponent

これでメールを送信すると以下のように送信されます。

Markdownメールをカスタマイズ

▼通知に関しての詳細は、以下のドキュメントをご覧ください。
https://readouble.com/laravel/9.x/ja/notifications.html

タイトルとURLをコピーしました