コントローラでブレードを指定して画面を作成するように、メールでもブレードを使ってメールの作成が可能です。今回はそれを可能にしてくれるMailableのお話です。
HTMLメールの送信
まず、Mailableの作成から。
$ php artisan make:mail HelloHtml
を実行すると、Mailableのクラス、HelloHtml.phpを作成してくれます。
これを以下のように編集します。
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class HelloHtml extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('こんにちは!') // メールの件名
->view('emails.hello'); // ここでブレードを指定
}
}
ブレードの中身は、簡単に以下とします。
<html>
<body>
<h1>こんにちは!</h1>
</body>
</html>
これをtinkerで送信します。
$ php artisan tinker
Psy Shell v0.10.6 (PHP 7.2.24 — cli) by Justin Hileman
>>> use App\Mail\HelloHtml;
>>> Mail::to('test@example.com')->send(new HelloHtml);
=> null
Mailtrapで送信されたメールを見てましょう。

HTMLメールとして届いていますね。
ここでひとつ修正です。前回にMailtrapの無料プランは3ヶ月までと書きましたが、それは大間違いで永遠に無料でした。毎月500通までの受信などの制限ありますが、私の使用頻度では十分です。
マークダウンを使ってもっとHTMLの要素をメールに
先に送信したメールは、HTMLですがとてもベーシックでつまらないですね。せっかくのHTMLだから、画像を入れたり色変えたりボタンを入れたりしたいです。しかし、コントローラの画面と違って、いちいちデザイナーに頼むのもなんです。
そこで、Laravelのマークダウンメールの登場です。
マークダウンのためのMailableのクラスの作成は、先のMailableのクラスと同じで、先のコマンドの実行に、–markdownの引数の指定するだけです。
$ php artisan make:mail HelloMarkdown --markdown=emails.hello-markdown
これで、HelloMarkdown.phpとhello-markdown.blade.phpが作成されます。
これらを以下のように編集します。
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class HelloMarkdown extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('こんにちは!マークダウン')
->markdown('emails.hello-markdown'); // viewでなくmarkdownメソッドを使用
}
}
@component('mail::message')
# こんにちは

ここにメールの内容が入る
@component('mail::button', ['url' => ''])
ホームページへ
@endcomponent
ありがとうございます<br>
{{ config('app.name') }}
@endcomponent
先と同様に、tinkerで送信します。
Psy Shell v0.10.6 (PHP 7.2.24 — cli) by Justin Hileman
>>> use App\Mail\HelloMarkdown;
>>> Mail::to('test@example.com')->send(new HelloMarkdown);
=> null
結果を、Mailtrapで見ると、以下のようになります。

