2018/12/28更新

[Laravel] Mailableクラスを作らずに、Mail::sendでサクッとメールを送信する

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
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、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。