first commit 2
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
<?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;
|
||||
Reference in New Issue
Block a user