Mailtrapを使って、下の画像の「Forgot Your Password?」のリンクからパスワードリセットのメールを送れるようにします。そしてパスワードリセットのメール本文を日本語化していきます。

この記事はカラムなどは追加せず、デフォルトのファイルで、以下のコマンドを実行しただけの状態での説明です。
1 2 |
$ php artisan make:auth $ php artisan migrate |
大まかな手順は以下の通り。
- Mailtrapのアカウント作成・登録
- Mailtrapでメール送信のテストを行えるようにする
- 日本語化の独自テンプレートの作成し、メール本文を日本語化する
サクッと読める目次
1.Mailtrapのアカウント作成・登録
Mailtrapを使えば、パスワードの再設定などのメール送信のテストを簡単に行うことができます。
まずはMailtrapのアカウントを作成していきましょう。
お使いのメールアドレスを登録していただければいいのですが
Gmailのアドレスでアカウントを作成した場合、下の画像の登録確認メールをうまく受信できませんでした。
Yahooメールのアドレスでアカウントを作成すると登録確認メールを受信することができました。
こんな感じのメールが届くので、「Confirm my account」のボタンを押して、ログインします。

ログインできたらHome画面にいき、Demo inboxをクリックします。

デモのメールボックス画面です。画面右のSMTPの赤枠の値を使って.envファイルを修正し、Mailtrapの設定をしていきます。

2.Mailtrapでメール送信のテストを行えるようにする
Mailtrapでメール送信のテストができるように設定していきます。まずは.envファイルの修正です。
.envファイルの修正
上の画像のSMTPの赤枠の値を使って、.envファイルを修正します。
MAIL_USERNAMEとMAIL_PASSWORDを変更します。他はデフォルトの値のままいけるハズ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//変更前 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null //変更後 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=aea7598feb9638 MAIL_PASSWORD=af4da9e8fb0b82 MAIL_ENCRYPTION=null |
パスワードリセットメールを送信する
「Forgot Your Password?」のリンクをクリックし、ここから↓(http://localhost:8000/password/reset)メールを送信してみましょう。
もちろん最初にRegisterからユーザーを登録しておいてください。seederを使ってテストデータをデータベースに設定してもらっても構いません。

送信したあと、Mailtrapにメールが届いているか確認してみます。こんな感じ↓のメールが届いていたらOKです。
ちなみにResetPasswordと書いている青のボタンからはリンク先へ飛ぶことはできません。

うまくメールが届かない場合は、キャッシュを削除してみてください。
1 |
$ php artisan config:cache |
これでひとまずMailtrapにメールが送れることを確認することができました。
ちなみに.envファイルの先ほど変更したコードの下に以下のコードを追記すると、fromを変更できます。
1 2 |
MAIL_FROM_ADDRESS=YourAddress@test.com MAIL_FROM_NAME=YourName |

3.独自テンプレートを作成し、メール本文を日本語化する
では、メール本文を日本語化していきましょう。
実はメール本文のテンプレートは以下のパスにあります。
vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php
でも、vendorに入っているし、このbladeファイルを修正するのはなんか色々めんどくさいっぽいです。
なので独自でメールの内容を日本語化するテンプレートを用意していきます。
通知クラスの作成
通知クラスを作成します。
1 |
$ php artisan make:notification CustomPasswordReset |
認証機能を持たせているモデルにメソッドを追加(デフォルトではUserモデルなので Userモデルに記載しています。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; //以下のuse文を追記 use App\Notifications\CustomPasswordReset; class User extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; //ここから public function sendPasswordResetNotification($token) { $this->notify(new CustomPasswordReset($token)); } //ここまでを追記 } |
通知クラスを編集
先ほど実行したコマンドの「php artisan make:notification CustomPasswordReset」で作成した通知クラスを編集していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; //追記 use Illuminate\Auth\Notifications\ResetPassword; class CustomPasswordReset extends Notification { use Queueable; //コンストラクタを編集 public function __construct($token) { $this->token = $token; } public function via($notifiable) { return ['mail']; } //toMailメソッドを編集 public function toMail($notifiable) { return (new MailMessage) ->subject(__('Reset Password')) ->view('emails.reset') ->action(__('Reset Password'), url('password/reset', $this->token)); } } |
メール本文のbladeファイルを作成する
viewsにemailsディレクトリを作りましょう。さらにemailsディレクトリの中に、reset.blade.phpを作ります。

「$actionUrl」の中に、Password/reset/hogefuga…にとばすURLが代入されています。
1 2 3 4 5 6 7 8 9 10 |
<h3> パスワード再設定用のメールです。 </h3> <p> 下記のパスワード再設定用URLをクリックしてください。<br> パスワードをリセットする必要がない場合は、何もしなくていいです。 </p> <p> <a href="{{ $actionUrl }}">パスワード再設定用URL</a> </p> |
うまくいけば、こんな感じのメールが届くはずです。

で、メール本文のURLリンクをクリックすると下の画像に飛ぶ。このページのURLが「{{ $actionUrl }}」に代入されています。

項目を入力して、ボタンをクリック。以下の画像が出てきたら完了です!

コメントを残す