-- 1. SMTP 서버 설정을 저장하는 테이블 CREATE TABLE IF NOT EXISTS `g5_mail_smtp_config` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID', `name` VARCHAR(255) NOT NULL COMMENT 'SMTP 설정 이름 (관리용)', `host` VARCHAR(255) NOT NULL COMMENT 'SMTP 호스트 주소', `username` VARCHAR(255) NOT NULL COMMENT 'SMTP 사용자 아이디', `password` VARCHAR(255) NOT NULL COMMENT 'SMTP 사용자 비밀번호', `port` INT NOT NULL DEFAULT 465 COMMENT '포트 번호', `encryption` ENUM('none','ssl','tls') NOT NULL DEFAULT 'ssl' COMMENT '암호화 방식', `from_email` VARCHAR(255) NOT NULL COMMENT '발신자 이메일', `from_name` VARCHAR(255) NOT NULL COMMENT '발신자 이름', `is_use` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '사용 여부 (1:사용, 0:미사용)', `is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '삭제 여부 (1:삭제, 0:정상)', `created_by` VARCHAR(20) NOT NULL COMMENT '생성자 아이디', `updated_by` VARCHAR(20) NOT NULL COMMENT '수정자 아이디', `created_at` DATETIME NOT NULL COMMENT '생성일시', `updated_at` DATETIME NOT NULL COMMENT '수정일시' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] SMTP 서버 설정 정보'; -- 2. SMTP 설정 변경 이력을 기록하는 테이블 CREATE TABLE IF NOT EXISTS `g5_mail_smtp_change_log` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID', `smtp_config_id` INT UNSIGNED NOT NULL COMMENT 'SMTP 설정 ID', `action` ENUM('insert','update','delete') NOT NULL COMMENT '작업 종류 (추가, 수정, 삭제)', `changed_by` VARCHAR(20) NOT NULL COMMENT '변경자 아이디', `change_date` DATETIME NOT NULL COMMENT '변경일시', `change_details` TEXT NOT NULL COMMENT '변경 상세 내용', KEY `smtp_config_id` (`smtp_config_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] SMTP 설정 변경 이력'; -- 3. 메일 템플릿의 본문, 헤더, 푸터 등을 저장하는 테이블 CREATE TABLE IF NOT EXISTS `g5_mail_template` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID', `code` VARCHAR(100) NOT NULL UNIQUE COMMENT '템플릿 고유 코드 (개발자용)', `title` VARCHAR(255) NOT NULL COMMENT '메일 제목', `content` LONGTEXT NOT NULL COMMENT '메일 본문 내용 (HTML)', `header_html` TEXT NULL COMMENT '템플릿별 헤더 HTML', `footer_html` TEXT NULL COMMENT '템플릿별 푸터 HTML', `is_use` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '사용 여부 (1:사용, 0:미사용)', `is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '삭제 여부 (1:삭제, 0:정상)', `created_by` VARCHAR(20) NOT NULL COMMENT '생성자 아이디', `updated_by` VARCHAR(20) NOT NULL COMMENT '수정자 아이디', `created_at` DATETIME NOT NULL COMMENT '생성일시', `updated_at` DATETIME NOT NULL COMMENT '수정일시' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 템플릿 정보'; -- 4. 각 템플릿에 사용되는 치환 변수({이름})와 기본값을 저장하는 테이블 CREATE TABLE IF NOT EXISTS `g5_mail_template_vars` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID', `template_id` INT UNSIGNED NOT NULL COMMENT '메일 템플릿 ID', `var_name` VARCHAR(100) NOT NULL COMMENT '치환 변수명 (예: 이름)', `default_value` TEXT NULL COMMENT '치환 변수의 기본값', `created_at` DATETIME NOT NULL COMMENT '생성일시', `updated_at` DATETIME NOT NULL COMMENT '수정일시', KEY `template_id` (`template_id`), CONSTRAINT `fk_template_vars_template_id` FOREIGN KEY (`template_id`) REFERENCES `g5_mail_template`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 템플릿의 치환 변수 정보'; -- 5. 메일 템플릿 변경 이력을 기록하는 테이블 CREATE TABLE IF NOT EXISTS `g5_mail_template_change_log` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID', `template_id` INT UNSIGNED NOT NULL COMMENT '메일 템플릿 ID', `action` ENUM('insert','update','delete') NOT NULL COMMENT '작업 종류 (추가, 수정, 삭제)', `changed_by` VARCHAR(20) NOT NULL COMMENT '변경자 아이디', `change_date` DATETIME NOT NULL COMMENT '변경일시', `change_details` TEXT NOT NULL COMMENT '변경 상세 내용', KEY `template_id` (`template_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 템플릿 변경 이력'; -- 6. 메일 발송 성공/실패 이력을 모두 기록하는 테이블 CREATE TABLE IF NOT EXISTS `g5_mail_send_log` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID', `to_email` VARCHAR(255) NOT NULL COMMENT '수신자 이메일', `cc_email` VARCHAR(255) DEFAULT NULL COMMENT '참조 이메일', `bcc_email` VARCHAR(255) DEFAULT NULL COMMENT '숨은참조 이메일', `subject` VARCHAR(255) NOT NULL COMMENT '메일 제목', `body` LONGTEXT NOT NULL COMMENT '메일 본문 (HTML)', `status` ENUM('success','fail') NOT NULL COMMENT '발송 상태 (성공, 실패)', `error_msg` TEXT NULL COMMENT '발송 실패 시 상세 오류 메시지', `try_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '재시도 횟수', `max_try_count` INT UNSIGNED NOT NULL DEFAULT 3 COMMENT '최대 재시도 횟수', `send_time` DATETIME DEFAULT NULL COMMENT '발송 완료 일시', `resend_of` INT UNSIGNED DEFAULT NULL COMMENT '재발송의 원본 로그 ID', `is_scheduled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '예약 발송 여부 (1:예약, 0:즉시)', `scheduled_time` DATETIME DEFAULT NULL COMMENT '예약 발송 시간', `created_by` VARCHAR(20) NOT NULL COMMENT '발송 요청자 아이디', `created_at` DATETIME NOT NULL COMMENT '로그 생성 일시', KEY `status` (`status`), KEY `resend_of` (`resend_of`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 발송 이력';