shjMailSendService = $shjMailSendService; } /** * コンソールコマンドを実行 * * 処理フロー: * 1. 入力パラメーターをチェックする * 2. メール送信テンプレート情報を取得する * 3. メールを送信する * 4. 処理結果を返却する * * @return int */ public function handle() { try { // 開始ログ出力 $startTime = now(); $this->info('SHJ メール送信処理を開始します。'); Log::info('SHJ メール送信処理開始', [ 'start_time' => $startTime, 'mail_address' => $this->argument('mail_address'), 'backup_mail_address' => $this->argument('backup_mail_address'), 'mail_template_id' => $this->argument('mail_template_id') ]); // 引数取得 $mailAddress = $this->argument('mail_address'); $backupMailAddress = $this->argument('backup_mail_address'); $mailTemplateId = $this->argument('mail_template_id'); // 【処理1】パラメータ検証 if (!$this->validateParameters($mailAddress, $backupMailAddress, $mailTemplateId)) { $this->error('パラメータが不正です。'); return self::FAILURE; } // SHJメール送信処理実行 $result = $this->shjMailSendService->executeMailSend($mailAddress, $backupMailAddress, $mailTemplateId); // 処理結果確認 if ($result['success']) { $endTime = now(); $this->info('SHJ メール送信処理が正常に完了しました。'); $this->info("処理時間: {$startTime->diffInSeconds($endTime)}秒"); Log::info('SHJ メール送信処理完了', [ 'end_time' => $endTime, 'duration_seconds' => $startTime->diffInSeconds($endTime), 'result' => $result ]); return self::SUCCESS; } else { $this->error('SHJ メール送信処理でエラーが発生しました: ' . $result['message']); Log::error('SHJ メール送信処理エラー', [ 'error' => $result['message'], 'details' => $result['details'] ?? null ]); return self::FAILURE; } } catch (\Exception $e) { $this->error('SHJ メール送信処理で予期しないエラーが発生しました: ' . $e->getMessage()); Log::error('SHJ メール送信処理例外エラー', [ 'exception' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); return self::FAILURE; } } /** * 【処理1】パラメータの妥当性を検証 * * 仕様書に基づく検証内容: * - メールアドレス: 「メールアドレス」「予備メールアドレス」いずれか必須 * - メールテンプレートID: 必須 * * @param mixed $mailAddress メールアドレス * @param mixed $backupMailAddress 予備メールアドレス * @param mixed $mailTemplateId メールテンプレートID * @return bool 検証結果 */ private function validateParameters($mailAddress, $backupMailAddress, $mailTemplateId): bool { // メールテンプレートIDチェック if (empty($mailTemplateId)) { $this->error('メールテンプレートIDは必須です。'); return false; } // 数値形式チェック(メールテンプレートID) if (!is_numeric($mailTemplateId)) { $this->error('メールテンプレートIDは数値である必要があります。'); return false; } // 正の整数チェック(メールテンプレートID) if ($mailTemplateId <= 0) { $this->error('メールテンプレートIDは正の整数である必要があります。'); return false; } // メールアドレスチェック(いずれか必須) if (empty($mailAddress) && empty($backupMailAddress)) { $this->error('メールアドレスまたは予備メールアドレスのいずれかは必須です。'); return false; } // メールアドレス形式チェック if (!empty($mailAddress) && !filter_var($mailAddress, FILTER_VALIDATE_EMAIL)) { $this->error('メールアドレスの形式が正しくありません。'); return false; } if (!empty($backupMailAddress) && !filter_var($backupMailAddress, FILTER_VALIDATE_EMAIL)) { $this->error('予備メールアドレスの形式が正しくありません。'); return false; } return true; } }