[Laravel] Mailableクラスを作らずに、Mail::sendでサクッとメールを送信する
こんにちは、@yoheiMuneです。
Laravelのメールに関するドキュメントでは、
それらのセットアップが完了したのちのメール送信部分のPHP実装について、このブログでは記述しています。
以下では、Controllerにてメールを送信する実装方法を紹介します。
テンプレートもテキストメール用のものを用意します(HTML関連のタグを書かない)。
https://github.com/illuminate/mail/blob/914ff68127a36cf13c730256873b1bc2cabe0070/Mailer.php#L226
最後になりますが本ブログでは、PHP、フロントエンド、Python、サーバー、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
Laravelのメールに関するドキュメントでは、
Mailable
を実装したクラスを作る手順が紹介されていますが、わざわざ作るのは面倒です。それを作らず簡単にメール送信できる方法があるので、今日はその実装をブログに書きたいと思います。前提条件
Laravelでのメール送信は、SFTP、Mailgun、SES、など様々な送信方法が用意されています。こちらのドキュメントを参考に行ってください。それらのセットアップが完了したのちのメール送信部分のPHP実装について、このブログでは記述しています。
Mailファサードを使ったメール送信
Mailableを実装したクラスを作らずとも、Laravelが提供するMail
ファサードで、メール送信処理を行うことができます。以下では、Controllerにてメールを送信する実装方法を紹介します。
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; // Mailファサードをインポート. use Illuminate\Support\Facades\Mail; class MyController extends Controller { // メールを送信するメソッド. public function sendMail() { // Mail::sendで送信できる. // 第1引数に、テンプレートファイルのパスを指定し、 // 第2引数に、テンプレートファイルで使うデータを指定する Mail::send('emails.user_register', [ "message" => "こんにちは!" ], function($message) { // 第3引数にはコールバック関数を指定し、 // その中で、送信先やタイトルの指定を行う. $message ->to('user1@sample.com') ->bcc('admin@sample.com') ->subject("ユーザー登録ありがとうございます"); }); } }また、テンプレートファイルを
resources/view/emails/user_register.blade.php
に作成します。ご登録ありがとうございます。<br> <br> メッセージ:{{ $message }}このように実装すると、新しくメール用のクラスを作らずとも、簡単にメールが送信できます。便利です。
テキストメールを送るには
上記の実装ではHTMLメールが送信されますが、テキストメールを送信することも可能です。テキストメールの場合は第1引数が変わります。// HTML形式ではなく、テキストメールで送る場合は、 // 第1引数でテキスト形式であることを伝えます. Mail::send(['text' => 'emails.user_register_plain'], [ "message" => "こんにちは!" ], function($message) { $message ->to('user1@sample.com') ->bcc('admin@sample.com') ->subject("ユーザー登録ありがとうございます"); });ポイントは
['text' => 'emails.user_register_plain']
と、配列で指定し、配列のキーにtext
を指定するということです。テンプレートもテキストメール用のものを用意します(HTML関連のタグを書かない)。
ご登録ありがとうございます。 メッセージ:{{ $message }}これでテキスト形式でもメールが送れました。
参考
今回紹介したMail::send
は、Laravelで以下の箇所で実装されています。ライブラリのコードを読むと勉強になります。https://github.com/illuminate/mail/blob/914ff68127a36cf13c730256873b1bc2cabe0070/Mailer.php#L226
最後に
Laravelを用いて多数のシステム構築を行なっていますが、メール送信機能の需要は大きいです。サクッと作れるとかっこいいですね。最後になりますが本ブログでは、PHP、フロントエンド、Python、サーバー、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!