6
6

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 2020-09-09

継続は力なり。めげずに今日も備忘録。
バッチの理解を深める為、簡単な処理を実装してみた。

環境

PHP 7.3.8
Laravel 6.18.35

本日のお題

バッチでメールを送ってみる。
今回は実装するアプリケーションの登録ユーザーに一括送信するもの。

メールの環境設定

mailtrap.ioというSMTPのダミーサーバーを利用する。
mailtrap.ioを利用する事で送信したメールは指定したアドレス宛てには送信されずに、mailtrap.ioの画面で結果を確認する事が出来るので、非常に便利です。会員登録したら直ぐに使えます。

mailtrap.ioの Inboxes から Demo inbox に遷移して、SMTP情報を確認します。
その情報を元に.envを編集します。

.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=mailtrap.ioのSMTP情報を参照
MAIL_PASSWORD=mailtrap.ioのSMTP情報を参照
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=test@example.com
MAIL_FROM_NAME="Example"

バッチ処理を書く

バッチコマンドクラスを生成する。

$ php artisan make:command SendMailCommand
SendMailCommand.php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\User;
//メール送信用ファサード
use Illuminate\Support\Facades\Mail;


class SendMailCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    //コマンドの名前
    protected $signature = 'users:send_mail';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'バッチの説明';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //モデルからユーザー情報を取り出して
        $users = User::all();
        //メールアドレスで繰り返し
        foreach ($users as $user) {
            echo $user['email']."\n";

            Mail::raw("これバッチでメールしているよ", function($message) use ($user)
            {
                //toで送信先、subjectで件名
                $message->to($user->email)->subject('test');
            });
        }
    }
}

これでバッチが完成

ですが〜
このままバッチコマンドを実行しても失敗する事があります。

 Swift_TransportException  : Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required

これが出た時はキャッシュをクリアしてあげましょう。

$ php artisan cache:clear
$ php artisan config:cache

改めてバッチコマンドを実行

php artisan users:send_mail

mailtrap.ioで正しく受信出来ているか確認してみましょう。
スクリーンショット 2020-09-09 23.36.02.png
上手くいっていますね!

参考

Laravel5で送信メールサーバー設定

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?