Laravelでメール送信機能を実装する場合には、Mailableクラスを使うことで比較的簡単に実装することができる。
この記事ではMailableクラスを使って複数宛先にメールを送信する2つの方法を紹介する。(意外とググっても出てこなかったのでググるまでもない内容かもしれないが残しておく)
目次
Mailableを使って複数宛先にメールを送信する2つの方法
この記事で紹介する2つの方法というのはユースケース自体が以下のとおり異なる。
- 1つのメールのTo(CC, BCCと同じ概念の中のTo)の中に複数の宛先を指定する(=総送信メール数は1通)
- 送信したい宛先毎に別々に同じ内容のメールを送信する(=総送信メール数は宛先数×1通)
というわけで上記2つのケースについて解説する。
前提は以下。
- メール送信処理を呼ぶのは
app/Services/SendMailService.php
- Mailableクラス名は
app/Mail/Sample.php
- 宛先は4件
1つのメールのToの中に複数の宛先を指定する
1つのメールで複数のToに送信するサンプルコード↓
use App\Mail\Sample;
$emails = [
'test1@example.com',
'test2@example.com',
'test3@example.com',
'test4@example.com',
]
Mail::to($emails)->send(new Sample());
Mail::to()
の引数に複数の宛先が入った配列を渡してあげることで1通のメールのToに複数のメールアドレスを設定することができる。
送信したい宛先毎に同じ内容のメールを送信する
送信したい宛先毎にメールを送信するサンプルコード↓
use App\Mail\Sample;
$emails = [
'test1@example.com',
'test2@example.com',
'test3@example.com',
'test4@example.com',
]
foreach ($emails as $email) {
Mail::to($email)->send(new Sample());
}
1つの宛先ごとにメールを1通、今回でいうと合計4通送るためにforeach
で繰り返し処理を行う方法。
Mail::to()
の引数に宛先のメールアドレスを指定する。
(参考)それぞれの処理時間の比較
宛先を4件としてそれぞれの処理時間を比較してみた結果を残しておく。
- 1つのメールのToの中に複数の宛先を指定する:約2.8s
- 送信したい宛先毎に別々に同じ内容のメールを送信する:約11.4s
当たり前っちゃ当たり前だが、後者の方が約4倍の処理時間がかかることがわかった。
最後
LaravelのMailableクラスを使って複数宛先にメールを送信する方法を紹介した。
Mail::to()
の引数に渡す内容で挙動が以下のとおり変わることがわかった。
- 配列を渡す:複数の宛先に送る(配列の要素が2つ以上の時)
- 文字列を渡す:1つの宛先に送る(配列の要素が1つの場合はこっちに当てはまる)
コメント