継続は力なり。めげずに今日も備忘録。
バッチの理解を深める為、簡単な処理を実装してみた。
環境
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で正しく受信出来ているか確認してみましょう。
上手くいっていますね!