やること
1.Mailableクラスの作成(app/mailディレクトリ)
2.Mailableクラスにbuild()の記載(textやsubjectメソッドの指定など)
3.mailファザードのtoメソッドを記載
4.メールテンプレートの作成
Mailableクラス
Laravelではメール送付のためのクラスとして、
Mailableクラスがある。
php artisan make:mail クラス名
を実行するとapp/Mailディレクトリにクラスが作成される。
Mailableクラスで使えるメソッド
mailableクラスの設定は、buildメソッド中で行う。
Mailableクラスで記載のクラス内にすでにbuildメソッドがあるので、
その中で記載していく。
- from:メールの送信者を指定
- with:テンプレートビューへデータを渡す(メール内でファイル名やIDを表示する場合など)
- subject:メールタイトルを指定
- text:メールを平文テキストで送付する際にtextメソッドでテンプレートを指定する
- view:メールをHTMLで送付する際にtextメソッドでテンプレートを指定する
なお、text,viewのテンプレートの場所は引数で指定する。
/**
* メッセージの生成
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->from('example@example.com');
}
メール送付のためのクラスの呼び出し
クラスの呼び出しはmailファザードのtoメソッドを使用することでメールを送付することが可能。
引数に宛先を渡してあげ、sendメソッドに渡す。
コントローラーに記載とLaravelリファレンスでは書いてあるが、
処理次第ではコントローラー以外でも問題なさそう。
Mail::to(宛先)->send(new Mailableのクラス名($パラメーター));
テンプレートの作成
textまたはviewで指定したディレクトリ配下にテンプレートを作成する。
テンプレートは通常Blade テンプレートで記載する。
Blade テンプレートなので、Withで渡した引数をテンプレート内で{{ @変数名 }}で使用可能。
class CompleteMail extends Mailable
{
use Queueable, SerializesModels;
// パラメータ
public $parameter;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($parameter)
{
$this->parameter = $parameter;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$q_id = $this->parameter['q_id']
return $this->view('emails.orders.shipped')
->from('example@example.com');
->with([
'q_id' => $q_id
])
}
この度はお問合いただきまして誠にありがとうございます。
─────────■ 問い合わせID ■──────────
{{ @q_id }}
今後とも、よろしくお願いいたします。
ローカル開発時の動作確認
メールログは、
ConfigのMail.phpにあるdriverを
'driver' => 'log',
'pretend' => false,
に変更することでLog上にメールタイトルから宛先、本文などが落ちるようになる。