91 lines
3.1 KiB
PHP
91 lines
3.1 KiB
PHP
<?php
|
|
/**
|
|
* 파일명: ajax_resend_mail.php
|
|
* 설명: 발송 이력에 있는 실패한 메일을 재발송하는 AJAX API
|
|
*/
|
|
|
|
// [추가] 디버깅을 위한 강력한 오류 처리기
|
|
// 모든 종류의 PHP 오류(Fatal Error 포함)를 감지하여 JSON 형식으로 출력합니다.
|
|
// 이렇게 하면 JavaScript에서 '서버 응답 오류' 대신 구체적인 오류 메시지를 받을 수 있습니다.
|
|
/*ini_set('display_errors', 0); // 오류를 직접 출력하지 않도록 설정
|
|
error_reporting(E_ALL);*/
|
|
|
|
// [수정] 상위 폴더에 있는 _common.php를 포함하도록 경로를 수정합니다.
|
|
include_once(__DIR__ . "/_common.php");
|
|
header('Content-Type: application/json');
|
|
|
|
$response = [
|
|
'success' => 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; |