1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelで非同期メール送信

Last updated at Posted at 2021-08-20

#概要(仕事をTODOリスト(Queue)に入れて、下請け業者(Worker)に投げる)

メール処理は大変重く、同期処理(Sync)で捌くと、Viewの読み込みに多くの時間が必要になる。

同期:アクション読み込み→メールJob→Viweの読み込み→画面の表示
非同:アクション読み込み→メールJobをqueueに保存→Viweの読み込み→画面の表示
                         →WorkerがバックヤードでメールJobの処理

・テストメールサーバーを用意する。
・メール送信機能を搭載する。
・非同期通信をオンにする。
・Queueを有効にする(データベースを作る)。
・workerをオンにして、Queue内のtaskを処理する。

#テストメール

mailtrapを使用する。

Mybox内のingrationからLaravelを選択する。
スクリーンショット 2021-08-20 18.26.34.png

以下の記述を丸ごとコピーして、プロジェクト内の.envへ

.txt
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=***USERNAME***
MAIL_PASSWORD=***PASSWORD***
MAIL_ENCRYPTION=tls

#.env記述(メーラーも非同期もまとめて記述)

..env
# 非同期処理 記述
QUEUE_CONNECTION=database

# メーラー機能 記述
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=***USERNAME***
MAIL_PASSWORD=***PASSWORD***
MAIL_ENCRYPTION=tls
# 送信元メールアドレス
MAIL_FROM_ADDRESS=sample@sender.com

.envを触った後は、一応キャッシュをクリア

.bash
php artisan config:cache

#メーラー設定

.bash
php artisan make:mail SampleMail

メール発火機能を入れたい任意のコントローラ

Controller.php
:
:
//クラスの宣言
use Illuminate\Support\Facades\Mail;
use App\Mail\SampleMail;
:
:


//メールを発火させたいアクション内に、以下を記述する。
public function index{
:
:
  SendSampleMail::dispatch();
:
:
}

#非同期設定(Queue設定)

.bash
//仕掛りJobを保存するための、Queueテーブルを作成する。
php artisan queue:table
php artisan migrate

//仕掛りJobを保存するための機能を作成
php artisan make:job SendSampleMail
Controller.php
:
:
//ジョブのクラスの宣言
use App\Jobs\SendSampleMail;
:
:
SendSampleMail.php
:
:
//メーラーのクラスの宣言
use Illuminate\Support\Facades\Mail;
use App\Mail\SampleMail;
:
:

    public function handle()
    {
        // Mail::to('送信先メールアドレス')
        //以下のメール送信JobをQueueのテーブルに保存しますという処理
        Mail::to('sample@reciever.com')->send(new SampleMail());
    }
:
:

#Workerを有効化

以下のコマンドでWorkerを起動させれば、Queueテーブルから、仕掛りJobを実行してくれる。
この時、PHP MyAdminを見れば分かるが、保存されているJobが終わり次第テーブルから削除されているのが分かる。

.bash
php artisan queue:work
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?