Laravelでお問合せフォームの実装②お問合せ返信メールの送信
2188 回閲覧されました
みなさんこんにちは、jonioです。
前回はお問合せフォームの内容を送信した時にデータベースのテーブルに保存する所までの解説をしました。
今回はお問合せフォームを送信した時にMailableを使って自動返信メールの実装方法の解説をします。
本番環境ではメールに使うサーバーはレンタルサーバーを使うと思うのですが今回はGmailを使います。
目次
アプリパスワードの取得
chromeのアプリパスワードをLaravelの「.env」に記述しないといけないので取得します。
↓の画面に移動して赤枠をクリックします。
そして「アカウント」をクリックします。
そして「セキュリティ」をクリックします。
私は2段階認証をしていますがそれをしないとメールの送信に必要なアプリパスワード(あとで説明します)の設定ができないので2段階認証を設定してください。
そしてセキュリティのページで「2段階認証プロセス」の項目をクリックします。
そしてページ一番下の「アプリパスワード」の項目をクリックします。
すると↓の画面になるので「アプリを選択」・「デバイスを選択」を選択します。
選択は以下となります。
- アプリを選択 : メール
- デバイスを選択 : その他 → アプリの名前を入力
そして画面右下の「生成」を押すと次のページでアプリパスワードが表示されます。
アプリパスワードはあとで使うので何かに控えて下さい。
次はLaravelプロジェクトの直下にある「.env」の編集です。
.envの編集
Laravelプロジェクトの直下にある.envの↓を編集します。
4行目の「自分のメールアドレス」は使いたいメールアドレスを記入します。
7行目の「メール送信元名」はメール送信者の名前を記入します。
8行目は新しく追加していますが「管理者側に通知するメールアドレス」は管理者のメールアドレスを記入します。
ここまでが終わったら「Laravelのプロジェクト > app >config > mail.php」を開いて98行目あたりに追記します。
98行目の意味は「adminは.envのMAIL_ADMINを使うが、もし設定がなければnull(何もなし)とする」という意味になります。
.envに新しく項目を追加したらmail.phpにも記述しないといけませんが理由を説明します。
.envファイルとconfigファイルの役割
「Laravelのプロジェクト > config」の中にあるファイル(↓の赤枠)をconfigファイルと言います。
.envファイル・configファイルの両方とも設定ファイルですが役割が違います。
.envはenvironment(環境)の略で環境設定のファイルであり本番環境と開発環境で.envを変える事ができます。
それに対してconfigファイルは開発環境・本番環境のどちらでも使える設定をする為のファイルです。
ちなみにconfigはconfigrationの略です。
ここでconfigファイルのmail.phpの中身を見てみましょう。
いたる所に「env」がありますがこれはデフォルトで.envファイルを読み込む為の設定でconfigファイルでenvファイルを読み込む設定をする事で開発環境・本番環境と環境が変わってもその時のenvファイルを読み込んで不具合が起きないようにしています。
だからenvファイルにデフォルトで存在しない新しい項目を追加した場合はconfigファイルで新しい設定を読み込む為の記述をしないといけません。
これが.envに新しく項目を追加したらmail.phpにも記述しないといない理由です。
ここで疑問を感じると思うのですが設定ファイルをenvファイルとconfigファイルの2つに分けるのではなく全部envファイルに設定すればいいと思いませんか?
でもこれはマズイです。
Laravelでは本番環境に移行する際にコンフィギュレーションキャッシュをしますが↓のコマンドで行います。
これをすると設定ファイルを一つにまとめて読み込みスピードを速くしますがenvファイルが読み込まれなくなります。
だからconfigファイルでenvファイルを読み込む必要が出てくるのでconfigファイルとenvファイルの両方が必要になります。
話が長くなりましたが次はメール送信ができるMailableの導入です。
Mailableを導入する手順
mailable(メイラブル)を使ってお問い合わせフォームを送信した時に自動メールの返信を行います。
メールの返信の流れは以下になります。
- コントローラーでメールの送信処理をしてメール送信はMailableに渡す。
- 新規Mailableクラスを作成して送信メールを設定する。その際に送信メールの内容はビューファイルを使う。
- ビューファイルに送信メールの内容を記述する。
1→2→3の順にコードを見ていきます。
1 : コントローラーの送信処理
既に記述したContactコントローラーを↓にします。
10行目・11行目を説明する前に33行目・34行目の説明をします。
33行目・34行目共に「Mail::to」がありますがこれは「Mailファサードのtoメソッドを使う」という意味です。
ファサードはざっくりした説明として便利な機能を簡単に使う事ができる物という感じです。
もう少しちゃんと説明するとサービスコンテナを簡単に使う事ができる物です。
サービスコンテナはこの記事に分かりやすい解説があります。
Mailファサードを使う為に10行目があります。
11行目はMailableを使える様にする為にあります。
33行目・34行目の説明に戻りますが33行目からです。
33行目は「Mail::to(config(‘mail.admin’))->send(new ContactForm($inputs));」ですが
「Mail::to(config(‘mail.admin’))」は「Laravelのプロジェクト > config > mail.php」の中のadminのMAIL_ADMINにメールを送信するという意味です。
「send(new ContactForm($inputs))」は「ContactForm(あとで作ります)に処理を渡す」という意味です。
次は34行目です。
「Mail::to($inputs[‘email’])->send(new ContactForm($inputs));」ですが「Mail::to($inputs[‘email’])」は「お問い合わせフォームで入力したメールに送信する」という意味です。
2 : Mailableクラスの作成
Mailableクラスを作成しますがクラス名をContactForm(あとで説明しますと言ったやつです)とします。
↓のコマンドを叩きます。
すると「Laravelのプロジェクト > app > Mail > ContactForm.php」 が作成されるのでコードを↓に編集します。
21行目・31行目を編集しています。
21行目の「$inputs」ですがフォームに入力した内容でContactコントローラーのstoreアクションに記述しています。
31行目の「return $this->view(‘contact.mail’)->with([‘inputs’ => $this->inputs])」の意味は「メールを送信する際にLaravelのプロジェクト > resources > views > contact > mail.blade.php(あとで作成します)を使ってメール文面を作成しますがその際にinputsを利用する」という事です。
「->subject(‘お問合せを受け付けました‘)」はメールの件名を「お問合せを受け付けました」に設定しています。
3 : 送信メールの内容を記述
「Laravelのプロジェクト > resoureces > views > contact > mail.blade.php」を作成して中身を↓にします。
12行目の「$inputs[‘title’]」・13行目の「$inputs[‘body‘]」・14行目の「$inputs[‘email]」はお問い合わせフォームに入力した内容です。
これでお問い合わせフォーム(http://localhost/contact/create)からお問合せフォームの内容を送信すると返信メールが管理者とお問合せをした人に来ます。
これでお問合せフォームの完成です。