Laravelのmailableクラスでメール送信をおこなう方法
こんにちは、okutani(@okutani_t)です。本記事では、「Laravelのmailableクラスを利用してメール送信をおこなう」方法について解説しています。
本記事では、PHP 7.2.4、Laravel 5.5.40、をそれぞれ利用しています。
また、開発環境(ローカル環境)でのメールの受け取りチェックには「MailCatcher」が便利です。設定方法は以下の記事を参考に。
本記事では、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を利用したメール送信機能を作る際の参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク