false, 'message' => '알 수 없는 오류가 발생했습니다.' ]; try { // 1. 권한 및 토큰 확인 if ($is_admin != 'super') { throw new Exception('최고 관리자만 접근 가능합니다.'); } // 2. 입력값 확인 // [수정] 단일 ID 대신 ID 배열을 받습니다. $log_ids = $_POST['ids'] ?? []; if (empty($log_ids) || !is_array($log_ids)) { throw new Exception('재발송할 메일을 선택해주세요.'); } // 3. 클래스 포함 및 객체 생성 // [수정] 상위 폴더의 classes 디렉토리에 있는 클래스 파일을 포함하도록 경로를 수정합니다. require_once(__DIR__ . '/classes/SendLogManager.php'); require_once(__DIR__ . '/classes/MailSender.php'); $logManager = new SendLogManager(); $mailSender = new MailSender(); $success_count = 0; $fail_count = 0; $total_count = count($log_ids); foreach ($log_ids as $log_id) { $log_id = (int)$log_id; if (!$log_id) continue; // 4. 원본 로그 데이터 가져오기 $original_log = $logManager->getById($log_id); // [수정] 성공한 메일도 재발송 가능하도록 상태 체크 조건을 제거합니다. if (!$original_log) { $fail_count++; continue; } // 5. 메일 재발송 실행 $success = $mailSender->sendRaw( $original_log['to_email'], $original_log['subject'], $original_log['body'], $log_id // 원본 로그 ID를 전달하여 이력 추적 ); if ($success) { $success_count++; } else { $fail_count++; } } // 최종 결과 메시지 생성 if ($success_count > 0) { $response['success'] = true; $message = "총 {$total_count}건 중 {$success_count}건의 메일을 성공적으로 재발송했습니다."; if ($fail_count > 0) { $message .= "\n{$fail_count}건은 실패했습니다. 발송 이력을 확인하세요."; } $response['message'] = $message; } else { // MailSender에서 이미 로그를 남기므로, 간단한 실패 메시지만 전달 throw new Exception("총 {$total_count}건의 메일 재발송에 모두 실패했습니다."); } } catch (Exception $e) { $response['message'] = $e->getMessage(); } echo json_encode($response); exit;