【Laravelの使い方】メール送信機能の実装方法

このページでは、Laravelを使ってメール送信機能を実装する方法について解説していきます。

機能の実装手順

メール送信機能の実装手順は次の通りです。

  1.  Mailableクラスの作成
  2. メール本文のテンプレートを作成(view)
  3. メール送信のコントローラーを作成

それぞれ、詳しく解説していきます。



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));

}

以上で、メールが送信できるようになります。

初心者におすすめ

created by Rinker
秀和システム
¥3,300 (2022/12/05 19:44:20時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA