LaravelではMailable(メイラブル)とNotificationsというふたつの方法でメールを送信できます。
今回は、新規ユーザー登録時に、管理人にメールが自動送信される、という設定で、Mailableの使い方を解説します。
【前提条件】
テスト環境は、Laravelのバージョン11を使っています。またLarave Breezeという認証機能が搭載されているという前提で、説明していきます。
Laravel Breezeのインストール方法は下記ご覧ください。
Laravelでメールを送れるMailableの使い方【初心者のLaravel入門講座】
下記の流れでメールを送信することにします。
◆今回実行する流れ
- .envファイルでメール送信設定
 - configに.envファイルの内容を反映
 - Mailを作成
 - メールテンプレートのビューファイル作成
 - コントローラーを作成
 - テスト
 
下記の状況が整っているとして、説明を進めていきます。
◆準備しておくもの
- 登録情報変更フォームが入ったビューファイル
 - ビューファイルの処理を受け取るコントローラー
 - ビューファイルとコントローラーをつなぐルート設定
 
①.envファイルでメール送信設定
まず最初に、.envファイルにメールを送信するための設定を入力します。
下記の5か所を入力してください。

| 1.MAIL_HOST | メールホスト | 
| 2.MAIL_USERNAME | サーバーに設定したメール | 
| 3.MAIL_PASSWORD | 上記に設定したパスワード | 
| 4.MAIL_FROM_ADDRESS | From欄のアドレス | 
| 5.MAIL_FROM_NAME | From欄のアドレス欄の名前 | 
それぞれ説明していきます。
なお本番環境以外ではテストメールツールを使うと便利です。
テストメールツールを使った場合、.envファイルの1~5の設定は、各テストメールツールによって異なります。詳しくは、各テストメールツールのマニュアル等ご覧ください。
なおLaravel Sailでは、Mailpitというテストメールツールがデフォルトで使えるので、.envファイルの1~5は設定不要です。
もしまだテストメールツールをご利用でなければ、下記記事も参考にしてくださいね。
1. Mail_HOST
メールのホスト名になります。
わたしはエックスサーバーを使っています。
エックスサーバーの場合、サーバーパネルにログイン後、「サーバー情報」をクリックします。

表示される画面の2行目に「ホスト名」情報が出てきます。

2.MAIL_USERNAME 3.MAIL_PASSWORD
MAIIL_USERNAMEとMAIL_PASSWORDは、サーバーに登録したものを使います。
登録時のメールに記載されていることが多いです。
エックスサーバーの場合は、Xserverアカウントにログイン後、登録情報確認画面から見ることができます。

4.Mail_FROM_ADDRESS
自動送信されるメールのFrom欄に表示されます。
2.Mail_USERNAMEと同じでもOKです。
5.Mail_FROM_NAME
From欄に表示される名前となります。
デフォルトだと “${APP_NAME}” と入っており、.envファイル1行目に入力されたアプリの名前がFrom欄に入ります。
変更したい場合には、この部分を編集してください。
②.envファイルに Mail_ADMINを追加
.envには、管理者用のメールアドレスを入れる項目として、Mail_ADMINをいれておくと便利です。
デフォルトでは.envファイルに書かれていません。
設定する場合は、Mail_From_NAMEの後に、次のように入力しておきましょう。
| 
					 1  | 
						MAIL_ADMIN='メールアドレス'  | 
					
②configに.envファイルの内容を反映
.envに【Mail_ADMIN】を追加した場合、configにも、この設定を反映させておきます。
app/config の mail.phpファイルを開き、116行目あたりに下記を入れておきましょう。
| 
					 1 2 3 4 5 6 7  | 
						    'from' => [         'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),         'name' => env('MAIL_FROM_NAME', 'Example'),     ],     // 追加     'admin'=>env('MAIL_ADMIN', null),  | 
					
③Mailを作成
php artisan make:mail で新規メールを作成します。
| 
					 1  | 
						php artisan make:mail UserRegistered  | 
					
app/Mailの中に UserRegistered.php ファイルができます。
次のように3か所編集していきましょう。
| 
					 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  | 
						{     use Queueable, SerializesModels;     // 追加     public $user;     public function __construct($user)     {         $this->user = $user;     }     public function envelope(): Envelope     {         return new Envelope(             // 件名             subject: '新規ユーザーの登録がありました',         );     }     public function content(): Content     {         return new Content(             // 修正(ビューファイルを指定)             view: 'mail.user_registered',         );     }     public function attachments(): array     {         return [];     } }  | 
					
順番に説明しますね。
最初に、コントローラーから引数 $user を受け取る処理を入れておきます。
| 
					 1 2 3 4 5 6  | 
						    public $user;     public function __construct($user)     {         $this->user = $user;     }  | 
					
これで、メールの中でも変数が使えるようになります。
envelopでは、件名をしていしました。またcontentでは、メール本文で使うビューファイルを指定しています。
④メールテンプレートのビューファイル作成
メールの中身になるビューファイルを作っていきます。
resources/viewsの中にmailフォルダを作ります。
そのなかに user_registered.blade.phpファイルを新規作成し、次のようなコードをいれておきます。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						<!DOCTYPE html> <html lang="ja"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>ユーザー登録しました。</title> </head> <body>     {{ $user->name }}さんより登録がありました。<br>     詳細は<a href="{{route('dashboard')}}">こちら</a>をご覧ください。 </body> </html>  | 
					
UserRegistered から受け取った$user変数を使って、ユーザーの情報を表示するようにしています。
⑤コントローラーを作成
次に、コントローラー側の処理となります。
今回は、ユーザー登録時にメールを送信することにします。app/Http/Auth/RegisteredUserController.phpファイルを編集します。
上部に2つのuse宣言を追加します。
| 
					 1 2 3  | 
						// 追加 use App\Mail\UserRegistered; use Illuminate\Support\Facades\Mail;  | 
					
48行目あたり、ユーザー登録処理が終わった箇所に、下記コードを追加します。
| 
					 1 2 3 4  | 
						        event(new Registered($user));         // 追加         Mail::to('test@test')->send(new UserRegistered($user));  | 
					
なお、’test@test’は、config(‘mail.admin’) と変えてあげると、.envに設定したadmin宛に送信されます。
⑥メール送信テスト
実際にメールを送信してみます。
次のようなメールが管理者とユーザーに送信されたら、成功!
下記は、Laravel sail環境でデフォルトで使用できるMailpitの画面です。


Mailpitは、Laravel Sailを起動した状態で、http://localhost:8025/を開くと確認できます。
追伸:うまくいかない場合
use宣言の入れ忘れなどがないか、チェックしてみてくださいね。
また、configの内容が反映されていない、ということも考えられます。
| 
					 1  | 
						php artisan config:clear  | 
					
| 
					 1  | 
						php artisan config:cache  | 
					
などをお試しください。
ただ、config:cache実施前にはご注意を。
詳しくは、こちらの記事をご参照ください。
さいごに
今回はMailable機能を使って、メールを送信する方法を解説しました。
コントローラーのコードの書き方は、次のとおり。
Mailableはお問い合わせフォーム自動返信など、いろいろな時に使えます。
似たような機能にNotificationsがありますが、こちらについては、下記で説明しています。
併せて参考にしてください。
  
  
  
  




