ここまでしなくても簡単にメールを送信することは出来るけど
メール本文の変更がわりと予想されるとか、メール本文を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 }}