#はじめに
問い合わせフォームで問い合わせがあった場合に、内容をメールで通知するシステムを組んだ際の備忘録。
LaravelのMailableクラスを利用し送信します。
#ファイル構成
Project
|-app
| |- Http
| | |- **SendController.php
| |
| |- Mail
| |- **SendMail.php
|
|-resources
| |- views
| |- contact
| |- mail.blade.php
|
|-.env
#コード
##Controller
send
メソッドの引数に、Mailable
クラスを継承したクラスを渡す。
SendController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Mail;
use Illuminate\Http\Request;
class SendController extends Controller
{
public function submit(Request $req){
//メールを送信
Mail::to("送信先アドレス")
->send(new SendMail($req['message']));
return view('sample');
}
}
##Mailableクラス
コンストラクタで表示するメッセージリストを受け取る。
build
メソッドで、あらかじめ準備したbladeを利用して本文を作成する。
HTMLメールの場合view
メソッド、通常テキストの場合text
メソッドを使う。
SendMail.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SendMail extends Mailable
{
use Queueable, SerializesModels;
protected $message;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($message)
{
//コンストラクタで表示するメッセージを受け取る
$this->message = $message;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->text('contact.mail')
->subject('件名')
->with(['message' => $this->message]);
}
}
##View
変数を展開して本文を作成する。
mail.blade.php
問い合わせが来ました。
---------------------
名前:{{$message->name}}
アドレス:{{$message->address}}
内容:{{$message->body}}
---------------------
##.env
.env
にメールサーバの情報を記載する。
.env
MAIL_MAILER=smtp
MAIL_HOST=***
MAIL_PORT=***
MAIL_USERNAME=***
MAIL_PASSWORD=***
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=***
MAIL_FROM_NAME="${APP_NAME}"
参考
Laravelでメール送信する
#最後に
利用するサーバの情報が間違っていてはまりました。
処理を何度も見直したことで理解が深まったのでOK!!!