[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をフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!






