Laravelではメール処理に便利なMailableクラスが用意されており、この機能を利用してメールを送信します。
Mailableクラスを用意する
例えばSampleMailクラスを作成する場合、以下のコマンドを実行します。
> php artisan make:mail SampleMail
すると、以下の内容でファイル「…/app/Mail/SampleMail.php」が生成されます。
namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class SampleMail extends Mailable { use Queueable, SerializesModels; public function __construct() { } public function build() { return $this->view('view.name'); } }
関数buildで、以下のように件名やメールの内容、宛先などを指定します。
public function build() { return $this->from('送り主メールアドレス') ->subject('メールタイトル') ->view('HTMLメール内容となるビューを指定') ->text('平文メール内容となるビューを指定') ->with('ビューへ渡すパラメータ') ->attach('添付ファイル'); }
fromを省略するとconfigファイルで設定した内容が適応されます。設定は「…/config/mail.php」の以下の部分を書き換えます。送り主情報が一定の場合は便利です。
'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ],
パラメータをビューへセットする
SampleMailクラスでパラメータを設定して、ビューへセットする方法です。
SampleMailクラスを以下のように編集します。
public $params; public function __construct($params) { $this->params = $params; }
このようにインスタンスに設定すれば、例えば以下のようにしてビューで値を取得することができます。
{{ $params['name'] }}
メールを送信する
それでは実際にコントローラ内で、SampleMailクラスを利用してメールを送信します。
まず、必要なクラスをインポートします。
use App\Mail\SampleMail; use Illuminate\Support\Facades\Mail;
例えば以下のように実行すれば、用意したMailableクラスとビューの内容でメールが送信されます。
$params = array(); $params['name'] = 'お名前'; Mail::to('送信先メールアドレス')->send(new SampleMail($params));
コメントする