Laravel7 メール送信の方法

ここまでしなくても簡単にメールを送信することは出来るけど
メール本文の変更がわりと予想されるとか、メール本文をbladeで作成した方が楽と思えるのであれば
Laravelのメール送信機能を使ってみるのも良いと思います。

メールクラスを作成する。

php artisan make:mail MailmagMail

app/MailフォルダにMailmagMail.phpが作成される。

MailmagMail.phpを編集する。
MailmagMailクラスがメールを送信する上で必要なパラメータを受け取る。

    public function __construct($mail, $title, $letter)
    {
        $this->mail = $mail;
        $this->title = $title;
        $this->letter = $letter;
    }

受け取った値を格納するプライベート変数を用意。

    private $mail;
    private $title;
    private $letter;

メール送信部分を記述。

    public function build()
    {
        return $this->to($this->mail)
            ->subject($this->title)
            ->view('mailmag.delivery')
            ->with(['letter' => $this->letter]);
    }

メール本文は、ページを表示する時と同じで、->view(対象blade)とする。
そのbladeに値を渡す必要がある場合は、->with()を使用する。

今回は受け取った$letterをそのまま送信しようと思うので、delivery.blade.phpの中身は

{{ $letter }}

のみとなる。

そして、MailmagMailクラスを利用するコントローラやコマンド側

use App\Mail\MailmagMail;

を宣言して、メールを送信したい箇所で

	    Mail::send(new MailmagMail(
			$mail,
			$title,
			$leter
	    ));

とすればOK!!

app/Mail/MailmagMail.phpのソース

<?php

namespace App\Mail;

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

class MailmagMail extends Mailable
{
    use Queueable, SerializesModels;

    private $mail;
    private $title;
    private $letter;

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

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {

        return $this->to($this->mail)
            ->subject($this->title)
            ->view('admin.mailmag.delivery')
            ->with(['letter' => $this->letter]);
        
    }

}

resources/views/mailmag.delivery.blade.phpのソース

{{ $letter }}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です