Laravelの基本はこちらから学べます

Laravelでメール送信(GmailのSMTP)




こんにちは。
今回は、アプリケーションからメールを送信する方法についてみていきましょう。

Gmailを使っていきますので、まだ登録をしていない方は登録を済ませておいてください。

Googleアカウントの設定

まず、Gmailをアプリケーションで操作するにはGoogleアカウント側でいくつか設定をする必要があります。

油そば

Googleのセキュリティ設定が 2 点程必要になるよ。

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等の装飾はしていない為、少々質素なメールになりましたが皆さんはリッチなメールにして使ってみてください!

それではお疲れ様でした。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です