フレームワーク

Laravelでメール送信機能を作成する方法

フレームワーク

みなさんも一度はWebサイトで登録を行って登録完了メールが届くというような経験をしたことがあるのではないでしょうか。
Laravelでもメールを作成し送信するまでの機能が備わっています。
この記事では、Laravelでメール送信を行う簡単な方法を紹介していきます。

作成方法

今回は画面にフォームとボタンがあり、フォームに名前を入力し送信ボタンを押すとRegisterControllerのregister関数が呼び出されると仮定します。

< RegisterController.php>

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class RegisterController extends Controller
{
    // 入力画面表示
    public function index() {
        return view('registers.index');
    }

    // 送信ボタン押下時に呼ばれる
    public function register(Request $request) {
        //
    }
}

画面表示の方法がわからない場合はこちらの記事を参考にしてください。
Laravelで簡単な画面表示を行う

メールを作成するクラスを作る

まずは、メールを作成するクラスを作ります。
以下のコマンドを実行してみましょう。

php artisan make:mail RegisterMail

App/Mailの下にRegisterMailクラスをもつファイルができました。
このクラスでメールの宛先などを指定することができます。

<RegisterMail.php>

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class RegisterMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('view.name');
    }
}

メール本文のファイル作成

次にメール本文を書くファイルの作成を行います。
今回はresources/viewsの下にregistersというフォルダを作り、その下にregister_mail.blade.phpというファイルを作りました。
ちなみに名前を入力する画面のファイル(index.blade.php)も同じフォルダ内にあります。

コントローラの編集

では、次にコントローラを以下のように書き換えてください。

< RegisterController.php>

use Illuminate\Support\Facades\Mail; //追記
use App\Mail\RegisterMail; //追記

~中略~

// 送信ボタン押下時に呼ばれる
public function register(Request $request) {
    $name = $request['name'];

    Mail::send(new RegisterMail($name));
  return view('registers.index');
}

Mail::send();が実際にメールを送信しているところです。
sendメソッドの引数にはメールを作成するクラスのインスタンスを設定しています。
また、インスタンス化する際の引数に$nameを渡しています。

メールを作成するクラスの編集

では、次にメールを作成するクラスを書き換えます。
アドレスなどは自分のアドレスにしても大丈夫です。

<RegisterMail.php>

public function __construct($name)
{
    $this->name = $name;
}

public function build()
{
    return $this->to('exampleAddress@mail.jp')  // 送信先アドレス
        ->subject('登録完了しました。')     // 件名
        ->view('registers.register_mail')     // 本文
        ->with(['name' => $this->name]);      // 本文に送る値
}

それぞれのメソッドがどのような働きをしているかはコメントの通りです。
コンストラクタを追記するのも忘れないでください。

メール本文の作成

今回は以下のような文章にしました。
本文はアレンジしてもらっても大丈夫です。

<register_mail.blade.php>

{{ $name }}様

ご登録が完了しました。ありがとうございます。

Gmailの設定

今回はGmailを使いメールを送信するため、まずGoogleの2段階認証プロセスを有効にする必要があります。
有効にする方法についてはこちらを参考にしてください。
2 段階認証プロセスを有効にする-パソコン-Google アカウント

2段階認証プロセスを有効にしたら、次にアプリパスワードを発行します。
2段階認証プロセスの下にあるアプリパスワードを押します。

アプリとデバイスを選択する画面に遷移するのでアプリに「メール」、デバイスに「Windowsパソコン」か「Mac」を選択し生成ボタンを押下します。

すると、以下のような画面が表示されるので黄色い部分のパスワードをコピーする。

.envファイルの設定

では、最後に.envファイルの設定をします。
.envファイルを開き、メールの部分を以下のように書き換えてください。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=exampleAddress@gmail.com   //送信元のGmailアドレス
MAIL_PASSWORD=password                   //コピーしたパスワード
MAIL_ENCRYPTION=tls

コメントがあるところは自分のアドレス・パスワードに変更してください。
Gmailアドレスは先ほど2段階認証したGoogleアカウントに登録されているアドレスです。

これでメールが送信できるようになったと思います。
名前を入力して送信ボタンを押してみましょう。
もし、メールが届かない場合は以下のコマンドでキャッシュを削除してもう一度実行してみてください。

php artisan config:cache

まとめ

今回はメールを送信する簡単な方法を紹介しました。
他の方法で送信したりアレンジを加えることでさらにできることの幅が広がります。
ぜひ、調べてみましょう。

タイトルとURLをコピーしました