カテゴリー: BackEnd

Laravelでメールを送る

はじめに

サービス登録時にメールを送ることがよくあると思います。今回はLaravelでメールを送る方法として比較的簡単なGmailを使った方法を紹介します。

準備

事前にGmailアカウントを作成し、Googleアカウントのセキュリティから、安全性の低いアプリからのアカウントへのアクセスを許可しておいてください(本番で使う場合はアプリパスワードを発行するほうが良いです)

実装

ユーザ登録時に招待メールを送るというシチュエーションを想定して解説していきます。

Mailableクラスの作成

メールの送信はmailableクラスを通して行います。以下のコマンドで作成します。

$ php artisan make:mail UserRegistered

このコマンドを実行すると、 app/Mail ディレクトリに UserRegistered.php が作成されます。

<?php

namespace App\Mail;

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

class UserRegistered 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');
    }
}

テンプレートの作成

mailableクラスを作成したら、メールのテンプレートを作成します。メールのテンプレートは resources/views ディレクトリの中であればどこに配置しても構いません。今回は  emails/users  ディレクトリを作成し、その中に registered.blade.php を作成します。

作成したBladeファイルは以下のように実装します。

<html>
    <head>
        <title>登録ありがとうございます</title>
    </head>
    <body>
        ようこそ {{ @user->name }} さん。
        ログインは<a href="{{ url('/login') }}">こちら</a>からお願いします。
    </body>
</html>

Mailableクラスの修正

テンプレートを作成したら、 UserRegistered クラスを以下のように修正します。なお、Userクラスは事前に作成してあるものとします。

<?php

namespace App\Mail;

use App\User; // 追加
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class UsersRegistered extends Mailable
{
    use Queueable, SerializesModels;

    // ビューへ渡すインスタンス
    public $user;

    /**
     * Create a new message instance.
     *
     * @return void
     */    public function __construct(User $user)
    {
        $this->user = $user; // 追加
    }

    /**
     * Build the message.
     *
     * @return $this
     */    public function build()
    {
        // テンプレートファイルを指定する
        return $this->view('emails.users.registered');
    }
}

mailableクラスで定義したpublicプロパティは、Bladeテンプレートでそのまま利用することができます。

コントローラの作成

コントローラにメール送信処理を実装します。コントローラは以下のコマンドで作成できます。

$ php artisan make:cotroller UsersController

作成したコントローラを以下のように修正します。

<?php

namespace App\Http\Controllers;

use App\User;
use App\Mail\UserRegistered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * ユーザ登録
     *
     * @param  Request  $request
     * @return Response
     */    public function store(Request $request)
    {
        $user = User::create($request);
        Mail::to($user->email)->send(new UserRegistered($user));
    }
}

コンフィグの修正

最後に.envを以下のように修正します。MAIL_USERNAMEとMAIL_PASSWORDは作成したGmailの設定に沿って変更してください。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=XXXXXXXX@gmail.com
MAIL_PASSWORD=XXXXXXXX
MAIL_ENCRYPTION=ssl

さいごに

Laravelからメールを送る方法として比較的簡単なGmailを使った方法を紹介しました。

おすすめ書籍

     

Hiroki Ono

シェア
執筆者:
Hiroki Ono
タグ: phplaravel

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前