vdeep

*

vdeepはプログラミング、IT、Web技術、ライフハックの事などなどを管理人okutaniがつぶやくブログです

Laravelのmailableクラスでメール送信をおこなう方法

   

LINEで送る
Pocket


こんにちは、okutani(@okutani_t)です。本記事では、「Laravelのmailableクラスを利用してメール送信をおこなう」方法について解説しています。

本記事では、PHP 7.2.4、Laravel 5.5.40、をそれぞれ利用しています。

また、開発環境(ローカル環境)でのメールの受け取りチェックには「MailCatcher」が便利です。設定方法は以下の記事を参考に。

LaravelでMailCatcherを利用してテストメールを送信する
こんにちは、okutani(@okutani_t)です。今回は、Laravelで便利にテストメールをおこな...
2016-12-26 19:50
はてブ

本記事では、MailCatcherを利用したメール送信チェックがおこなえる前提で進めています。

それでは、Laravelのmailableクラスでメール送信をおこなう方法を見ていきましょう。

スポンサーリンク

mailableクラスを作成

以下のコマンドでmailableクラスを作成します。

$ php artisan make:mail ChatNotification

今回は一例として、「チャットが行われたらユーザーにメール通知をおこなう」というシチュエーションで話を進めていきます。

上記を実行すると「app/Mail/ChatNotification.php」が作成されます。

今回は以下のように実装しました。

<?php

namespace App\Mail;

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

class ChatNotification extends Mailable
{
    use Queueable, SerializesModels;

    private $user;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('【アプリ名】メッセージが届いています')
            ->text('emails.chat_notification_plain')
            ->with(['user' => $this->user]);
    }
}

コンストラクタでUserのインスタンスを受け取り、viewに渡すように記述しました。

次にviewファイルを用意しましょう。

viewファイルの用意

メール送信に必要なviewファイルを用意します。

メールを受け取る端末(メーラー)がHTMLメールを受け取れない可能性もあるので、平文のメールは必ず用意しておきましょう。

本記事では、HTMLのviewの設置方法は省略し、平文のメール送信のみ解説しています(そのうちHTMLメールの送信方法も追記します)。

「resources/views/emails/chat_notification_plain.blade.php」を以下の内容で用意しました。

{{ $user->name }}様

メッセージが届きました。マイページからメッセージ本文をご確認ください。

ユーザーのインスタンスを渡しているので、「{{ $user->name }}」でユーザー名を取得しています。

これで、上記の内容で平文のメール送信がおこなえますね。

メール送信を実行

今回はController内でメール送信を実行してみます。

任意のControllerで、以下のようにメール送信に必要なクラスをuseし、sendメソッド内でメール送信を実行。

<?php
...省略...
use Illuminate\Support\Facades\Mail; // 追記
use App\Mail\ChatNotification; // 追記

class HogeController extends Controller
{
    public function send()
    {
        $user = User::find(1); // 任意のユーザー

        Mail::to($user->email)->send(new ChatNotification($user));
    }
}

今回、一例としてtoメソッドにはユーザーのemailアドレスを渡すことを想定していますが、「to('to@example.com')」などで直接指定しても大丈夫です。

これで、sendメソッドを実行すれば、特定のユーザーにメールを送信することができます。

MailCatcherを確認すると、メールが届いていることが確認できるかと思います。

実際に本番で利用する際は、「SendGrid」や「AWS SES」などのサービスを利用すればOKですね。

かんたんな解説でしたが、Laravelを利用したメール送信機能を作る際の参考になれば幸いです。

LINEで送る
Pocket

okutani (@okutani_t) のヒトコト
Laravelだとかんたんにメールが送れて便利ですね。どんどん利用していこうと思います。

 - Laravel

スポンサーリンク

PC用AdSense

PC用AdSense

  こちらもどうぞ

vdeepのトップページへ戻る画像です。風船の形をした島を女の子が掴んでいます。