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がありますが、こちらについては、下記で説明しています。
併せて参考にしてください。