103 lines
4.0 KiB
PHP
103 lines
4.0 KiB
PHP
<?php
|
|
/**
|
|
* 파일명: ajax_universal_send.php
|
|
* 설명: AJAX 요청을 받아 MailSender 클래스를 통해 템플릿 기반 메일을 발송하는 범용 API
|
|
*/
|
|
|
|
// 💡 [수정] AJAX 파일이 직접 호출될 때 경로 문제를 원천적으로 해결하기 위해,
|
|
// 그누보드 최상위 common.php 파일을 먼저 포함합니다.
|
|
// __DIR__ 를 사용하여 현재 파일의 위치를 기준으로 절대 경로를 만듭니다.
|
|
define('G5_IS_ADMIN', true);
|
|
include_once(__DIR__.'/../../common.php');
|
|
|
|
// common.php가 포함된 후에는 G5_ADMIN_PATH 상수를 사용할 수 있습니다.
|
|
// include_once(G5_ADMIN_PATH.'/admin.lib.php');
|
|
|
|
// 이제 나머지 코드를 실행합니다.
|
|
header('Content-Type: application/json');
|
|
|
|
// 💡 [추가] 메일 발송에 필요한 클래스를 안전하게 포함합니다.
|
|
// 이 코드는 common.php가 로드된 후에 실행되므로 G5_PHPMAILER_PATH 같은 상수를 사용할 수 있습니다.
|
|
require_once(__DIR__ . '/classes/MailSender.php');
|
|
|
|
// --- 입력 데이터 처리 ---
|
|
$template_code = trim($_POST['template_code'] ?? '');
|
|
$to_email = $_POST['to_email'] ?? ''; // 수신자 이메일 (문자열 또는 배열)
|
|
$cc_email = $_POST['cc_email'] ?? []; // 참조 이메일 (문자열 또는 배열)
|
|
$bcc_email = $_POST['bcc_email'] ?? []; // 숨은 참조 이메일 (문자열 또는 배열)
|
|
$vars = $_POST['variables'] ?? []; // 템플릿에 치환될 변수 배열
|
|
|
|
$response = [
|
|
'success' => false,
|
|
'message' => '알 수 없는 오류가 발생했습니다.'
|
|
];
|
|
|
|
try {
|
|
// 템플릿 코드는 필수입니다.
|
|
if (empty($template_code)) {
|
|
throw new Exception('메일 발송에 필요한 템플릿 코드가 지정되지 않았습니다.');
|
|
}
|
|
|
|
// 수신자 이메일($to_email)이 지정되지 않은 경우, 사이트의 최고 관리자에게 발송합니다.
|
|
// (예: 홈페이지 문의 양식)
|
|
if (empty($to_email)) {
|
|
global $config;
|
|
$to_email = $config['cf_admin_email'];
|
|
if (empty($to_email)) {
|
|
throw new Exception('수신자 이메일이 지정되지 않았고, 사이트 기본 관리자 이메일도 설정되지 않았습니다.');
|
|
}
|
|
}
|
|
|
|
// [추가] 클라이언트에서 'ADMIN_EMAIL'이라는 특별한 값을 보내면,
|
|
// 서버 설정(config.php)에 저장된 실제 관리자 이메일로 치환합니다.
|
|
// 이렇게 하면 클라이언트 JS 소스코드에 관리자 이메일이 노출되지 않습니다.
|
|
global $config;
|
|
$admin_email = $config['cf_admin_email'];
|
|
|
|
// cc_email 처리
|
|
if (!empty($cc_email)) {
|
|
if (is_array($cc_email)) {
|
|
foreach ($cc_email as $key => $email) {
|
|
if ($email === 'ADMIN_EMAIL') {
|
|
$cc_email[$key] = $admin_email;
|
|
}
|
|
}
|
|
} else if ($cc_email === 'ADMIN_EMAIL') {
|
|
$cc_email = $admin_email;
|
|
}
|
|
}
|
|
|
|
// bcc_email 처리
|
|
if (!empty($bcc_email)) {
|
|
if (is_array($bcc_email)) {
|
|
foreach ($bcc_email as $key => $email) {
|
|
if ($email === 'ADMIN_EMAIL') {
|
|
$bcc_email[$key] = $admin_email;
|
|
}
|
|
}
|
|
} else if ($bcc_email === 'ADMIN_EMAIL') {
|
|
$bcc_email = $admin_email;
|
|
}
|
|
}
|
|
|
|
// --- 메일 발송 실행 ---
|
|
$mailSender = new MailSender();
|
|
// send 메서드 시그니처 변경에 맞춰 인자 전달
|
|
$success = $mailSender->send($template_code, $to_email, $vars, $cc_email, $bcc_email);
|
|
|
|
if ($success) {
|
|
$response['success'] = true;
|
|
$response['message'] = '요청하신 메일이 성공적으로 발송되었습니다.';
|
|
} else {
|
|
// MailSender 클래스 내부에서 이미 로그를 기록하므로, 사용자에게는 간단한 메시지만 전달합니다.
|
|
throw new Exception('메일 발송에 실패했습니다. 시스템 로그를 확인해주세요.');
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
// 예외 발생 시 에러 메시지를 응답에 담습니다.
|
|
$response['message'] = $e->getMessage();
|
|
}
|
|
|
|
// 최종 결과를 JSON 형태로 출력합니다.
|
|
echo json_encode($response);
|
|
exit; |