Files
dnssash/adm/mail_manage/ajax_resend_mail.php
2026-06-11 18:47:38 +09:00

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;