Laravel Mailableでメール送信機能を実装する

2020年5月16日

PHP

Laravel(Framework 7.10.3)において問い合わせフォームを作成し、mailableクラスを利用してメール送信の機能を実装してみます。

 

 

本記事においては、ローカル環境においてメール送信を試すために mailtrap サービスを利用します。

 

 

 

問い合わせフォームの作成


 

コントローラーを作成し、下記のように編集します。

 

app/Http/Controllers/ContactController.php

7行目 mailableクラスです(後述で説明します)。

19〜40行目 バリデーションについては下記ページをご覧下さい。

バリデーション [Validatorファサード]

 

44行目

Mailファザードを利用してメールを送信しています。sendメソッドにはmailableクラス(後述)のインスタンスを設定します。

 

46行目 フラッシュデータを保存しています。下記ページをご覧下さい。

セッション(session)を利用する

 

 

次にルーティングの設定をします。下記コードをweb.phpに追記します。

 

routes/web.php

 

問い合わせフォームとしてのviewファイルを作成し、下記のように記述します。

 

resources/views/contact/index.blade.php

1〜5行目

送信に成功すると「送信いたしました!」と表示され、画面をリロードするとその文言が消える仕組みを実現しています。

 

 

 

 

mailableクラスの作成


 

mailableクラスを作成します。Mailディレクトリ・HelloEmail.phpファイルが生成されるので下記のように編集します。

 

app/Mail/HelloEmail.php

20〜23行目

ContactController.phpで説明したsendメソッド(44行目)に設定したインスタンスの引数をコンストラクタに渡しています。

 

30〜36行目

buildメソッドで、メールの件名や送信者を設定し、メールの中身を構成するviewテンプレートを指定します。

 

 

次にメールの中身となるテンプレートを作成します。

 

resources/views/emails/contact.blade.php

 

この時点で.envのMAIL_MAILERにlogと設定し、フォーム画面から送信するとlaravel.logファイルにメールの送信内容が表示されます。.envを編集したらキャッシュのクリアをお忘れなく(php artisan cache:clear)。

 

.env

 

storage/logs/laravel.log

 

 

mailtrapサービスの利用


 

mailtrap サービスを利用してみます。登録を完了したら「Home / Demo inbox」画面に移動します。UsernameとPasswordの値をコピーし、.envファイルにそれぞれ設定します。

 

 

.env

※MAIL_MAILERはsmtpに戻しておきます。

 

フォームに入力し送信すると、下記のようにメールが届いていることを確認できます。

 

 

 

本記事では同期的にメール送信を実装しましたが、非同期処理による実装は下記関連ページをご覧下さい。

 

関連ページ

Queueを利用して非同期によるメール送信

 

 

参照ページ


 

Laravel 7.x メール

 

 

 

LINEで送る
Pocket

定番本
定期本
 
Copyright © 2020 思考の葉 All Rights Reserved.  プライバシーポリシー