コントローラでブレードを指定して画面を作成するように、メールでもブレードを使ってメールの作成が可能です。今回はそれを可能にしてくれる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') # こんにちは ![Gmail](https://example.com/gmail.png) ここにメールの内容が入る @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で見ると、以下のようになります。
メルマガ購読の申し込みはこちらから。