Help us understand the problem. What is going on with this article?

Laravel 5.3 でメールを送る

More than 3 years have passed since last update.

きっかけ

  • Laravelのドキュメントを読んでいたら Laravel 5.3Laravel 5.2 のメール関連のページ内容が全く違うことに気づいて、おう変わったんやな? と思いサンプル通りにやってみた。
  • Mailables? なんて訳せばいいのこれ(という感じなので本文はMailablesで押し通します)

Mailablesを作る

php artisan make:mail HogeShipped

Mailablesを書く

メモ

  • build メソッド内で各種設定をする感じっぽい。
  • HTMLメールの場合は view メソッド、プレーンテキストの場合は text メソッドを使う
    • ※今回はテキストメールを送りたいので text メソッドを利用
  • from メソッドは 1つ目の引数がメールアドレス、2つ目が表示名っぽい
  • このクラスの public なプロパティが view に渡るっぽいので、呼び出し側から渡せるようにコンストラクタの引数を設定

コード

app/Mail/HogeShipped.php
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class HogeShipped extends Mailable
{
    use Queueable, SerializesModels;

    public $options;
    public $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($options, $data)
    {
        $this->options = $options;
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from($this->options['from'], $this->options['from_jp'])
            ->subject($this->options['subject'])
            ->text($this->options['template']);
    }
}

送信部分を書く

メモ

  • オプションとデータを上のクラスに渡してあげる

コード

app/Http/Controllers/HogeController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Mail\HogeShipped;
use Mail;

class HogeController extends Controller
{
    public function send()
    {
        $options = [
            'from' => 'hoge@hogehogehogehoge.hoge',
            'from_jp' => 'ほげほげ',
            'to' => 'fuga@fugafugafugafuga.fuga',
            'subject' => 'テストメール',
            'template' => 'emails.hoge.mail', // resources/views/emails/hoge/mail.blade.php
        ];

        $data = [
            'hoge' => 'hogehoge',
        ];
        Mail::to($options['to'])->send(new HogeShipped($options, $data));
    }
}

メールテンプレートを書く

resources/views/emails/hoge/mail.blade.php
{{ $data['hoge'] }}

以上でたぶん送信できるはず。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away