こんにちは。
今回は、アプリケーションからメールを送信する方法についてみていきましょう。
Gmailを使っていきますので、まだ登録をしていない方は登録を済ませておいてください。
Contents
Googleアカウントの設定
まず、Gmailをアプリケーションで操作するにはGoogleアカウント側でいくつか設定をする必要があります。
2 段階認証プロセス
まずはGoogleアカウントのセキュリティにアクセスしましょう。
https://myaccount.google.com/security

2 段階認証プロセスをクリック。
説明通りに進めてください。
アプリパスワード
2 段階認証プロセスの設定が終了すると、以下の画像のように
アプリパスワードを作成できるようになります。

クリックすると以下のような画面が出てきますので、設定をしましょう。

生成したら完了です!

生成されたアプリパスワードは忘れずにメモをしておいてください。
Laravel側の設定(env)
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com //gmailに変更 MAIL_PORT=587 //587に変更 MAIL_USERNAME=hoge@gmail.com //あなたのGmailアドレスを入力してください。 MAIL_PASSWORD=hogehoge //こちらに先ほど生成されたアプリパスワードを入力してください。 MAIL_ENCRYPTION=tls //tlsに変更 MAIL_MAILER=smtp MAIL_FROM_NAME="${APP_NAME}"
envファイルに先ほど生成されたアプリパスワードなどを登録してあげましょう。

SMTPは(Simple Mail Transfer Protocol)という通信規約のことです。
パスワード変更機能
.envへの記述が終了したので、実際に動作確認をしてみましょう。

Login画面から、「Forgot Your Password?」をクリック

Reset Password画面からメールアドレスを記入し、送信してみましょう。

メールが届きましたね。おめでとうございます。
メールを特定のタイミングで送信したい。
webアプリケーションを開発していると、特定のタイミング、例えばECサイトを作成しているのであれば購入希望者が現れた時などにメール配信機能を実装したいと考える場合があると思います。
今回は、お問い合わせページを作成しユーザーが入力した内容を私たちがメールで受け取れるような実装をしてみましょう。
準備(controller, blade, routingの準備)
まずはメールの配信のロジックを記述する前に準備をしていきます。
まずはルーティングから。
//web.php Route::resource('contacts', 'ContactController');
次にコントローラを作成しましょう。
//ContactController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ContactController extends Controller { public function __construct() { $this->middleware('auth'); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return view('contact'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { dd($request); } }
お問い合わせフォームを作成します。
/views/contact.blade.php @extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center mt-5 text-center"> <div class="col-8"> <p class="h2">お問い合わせ</p> </div> <div class="col-md-8"> <form action="" method="POST"> @csrf <div class="form-group"> <label for="contact">お問い合わせ内容をご記入ください。</label> <textarea class="form-control" id="contact" rows="3" name="contact"></textarea> </div> <button type="submit" class="btn btn-primary">送信</button> </form> </div> </div> </div> @endsection
入力内容が受け取れているか確認。
お問い合わせフォームからテキストを入力し、送信を押してみましょう。

このように、入力内容が受け取れていたらOKです。
メール送信ロジック
//ContactController.php use Mail; use Auth; // store Mail::send('emails.contact', [ 'user' => Auth::user(), 'contact' => $request->contact, ], function ($message) { $message->to(config('mail.username'))->subject('お問い合わせがありました。'); }); return redirect()->route('contacts.index');
mailファサードもsendメソッドを使用することで簡単にメールを送信することができます。
また、config関数を用いています。こちらは config/mail.php に記載されている、usernameを意味します。
//mail.php 'username' => env('MAIL_USERNAME'),
こちらは env 関数を用いて .env に記載した MAIL_USERNAME を参照することができます。
結果として、あなたが .env に登録したメールにメールが届くというロジックです。
メール用のbladeを用意する
//mails/contact.blade.php <p>{{ $user->name }}</p>さんから <p>{{ $user->email }}</p> <p>{{ $contact }}</p>
ここまでできれば完成です。実際にコンタクトフォームに適当な文字列を記入し、メールを送信してみましょう!

届きましたね。今回はblade等の装飾はしていない為、少々質素なメールになりましたが皆さんはリッチなメールにして使ってみてください!
それではお疲れ様でした。
Googleのセキュリティ設定が 2 点程必要になるよ。