このページでは、Laravelを使ってメール送信機能を実装する方法について解説していきます。
機能の実装手順
メール送信機能の実装手順は次の通りです。
- Mailableクラスの作成
- メール本文のテンプレートを作成(view)
- メール送信のコントローラーを作成
それぞれ、詳しく解説していきます。
1. Mailableクラスの作成
まずは、以下のコマンドでMailableクラスを作成します。
php artisan make:mail クラス名
クラス名はなんでもOKですが、わかりやすいものにしておきましょう。
コマンドを実行すると、「app/Mail」ディレクトリにMailableクラスが生成されます。
中を見ると、次のようになっています。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SampleMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
}
public function build()
{
return $this->view('view.name');
}
}
メールの内容が固定の場合(変数を渡さない場合)
メールの内容が固定の場合は次のように書きます。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SampleMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
}
public function build()
{
return $this->form('admin@gmail.com') //メールの送信元
->subject('完了通知') //メールのタイトル
->view('emails.complete'); //メールのテンプレート(view)
}
}
上記のように書くと、「resources/views/emails」の中にある「complete.blade.php」をメール本文のテンプレートとして使うことになります。
メールの内容が変動する場合(変数を渡す場合)
メールの内容が固定でない場合は、次のように書きます。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SampleMail extends Mailable
{
use Queueable, SerializesModels;
//受け取る変数
public $user;
public $content;
public function __construct($user, $content)
{
//変数に受け取った値をセット
$this->user = $user;
$this->content = $content;
}
public function build()
{
return $this->form('admin@gmail.com') //メールの送信元
->subject('完了通知') //メールのタイトル
->view('emails.complete') //メールのテンプレート(view)
->with(['user' => $this->user, 'content' => $this->content]); //viewに変数を渡す
}
}
2. メール本文のテンプレートを作成(view)
「resources/views/emails」にMailableクラスで指定した名前のviewを作成します(上の例の場合「complete.blade.php」)
中身は送信しない内容を書けばOKです。
{{ $user->name }}様<br>
いつもお世話になっております。
3. メール送信のコントローラーを作成
コントローラーを作成し、次のように書けばOKです。
※余計なところは省略しています。
<?php
use App\Mail\SampleMail; //Mailable クラス
use Mail;
public function sendMail($user_id, $content){
// メール送信に必要なデータを取得
$user = User::find($user_id);
//送信先や名前をセット
$to = [
[
'email' => $user->email,
'name' => $user->name.'様',
]
];
//メール送信処理
Mail::to($to)->send(new SampleMail($user, $content));
}
以上で、メールが送信できるようになります。
初心者におすすめ