-- ============================================ -- 邮件服务器完整数据库初始化脚本 -- ============================================ -- 创建数据库(如果不存在) CREATE DATABASE IF NOT EXISTS mail_server CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE mail_server; -- 创建用户并授权(关键步骤!) CREATE USER IF NOT EXISTS 'mail_user'@'%' IDENTIFIED BY 'user123'; GRANT ALL PRIVILEGES ON mail_server.* TO 'mail_user'@'%'; FLUSH PRIVILEGES; -- ============================================ -- 核心功能表 -- ============================================ -- 用户表 CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, is_admin TINYINT(1) DEFAULT 0, is_active TINYINT(1) DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 邮件表(兼容两种存储方式:SimpleSmtpServer用sender/recipient,SmtpHandler用sender_id/recipient_id) CREATE TABLE IF NOT EXISTS emails ( id INT AUTO_INCREMENT PRIMARY KEY, sender VARCHAR(100), recipient VARCHAR(100), sender_id INT, recipient_id INT, subject VARCHAR(200), body TEXT, headers TEXT, size_bytes INT DEFAULT 0, is_deleted TINYINT(1) DEFAULT 0, is_read TINYINT(1) DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (sender_id) REFERENCES users(id) ON DELETE SET NULL, FOREIGN KEY (recipient_id) REFERENCES users(id) ON DELETE SET NULL ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB; -- 系统日志表 CREATE TABLE IF NOT EXISTS server_logs ( id INT AUTO_INCREMENT PRIMARY KEY, log_type VARCHAR(50), message TEXT, client_ip VARCHAR(45), user_id INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB; -- ============================================ -- 管理功能表 -- ============================================ -- 系统设置表 CREATE TABLE IF NOT EXISTS system_settings ( id INT AUTO_INCREMENT PRIMARY KEY, setting_key VARCHAR(100) UNIQUE NOT NULL, setting_value TEXT, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB; -- 过滤规则表 CREATE TABLE IF NOT EXISTS filter_rules ( id INT AUTO_INCREMENT PRIMARY KEY, rule_type ENUM('email', 'ip') NOT NULL, rule_value VARCHAR(255) NOT NULL, action ENUM('block', 'allow') DEFAULT 'block', description TEXT, is_active TINYINT(1) DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_rule (rule_type, rule_value) ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB; -- 服务状态表 CREATE TABLE IF NOT EXISTS service_status ( id INT AUTO_INCREMENT PRIMARY KEY, service_name VARCHAR(50) UNIQUE NOT NULL, is_running TINYINT(1) DEFAULT 0, pid INT, last_started_at TIMESTAMP NULL, last_stopped_at TIMESTAMP NULL, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB; -- 用户邮箱大小限制表 CREATE TABLE IF NOT EXISTS user_mailbox_limits ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, size_limit_bytes BIGINT DEFAULT 104857600, -- 100MB FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, UNIQUE KEY unique_user (user_id) ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB; -- ============================================ -- 插入默认数据 -- ============================================ -- 插入测试用户(密码都是:123456) INSERT INTO users (username, password_hash, is_admin, is_active) VALUES ('admin@test.com', '$2y$10$jB21V61k9aLAyp5.5qBpV.L70Aq6.XrtJrvlNI28bOXeJboLBJwoq', 1, 1), ('user1@test.com', '$2y$10$jB21V61k9aLAyp5.5qBpV.L70Aq6.XrtJrvlNI28bOXeJboLBJwoq', 0, 1) ON DUPLICATE KEY UPDATE username = VALUES(username); -- 插入测试邮件 INSERT INTO emails (sender, recipient, subject, body) VALUES ('admin@test.com', 'user1@test.com', '欢迎使用邮件系统', '这是第一封测试邮件'), ('user1@test.com', 'admin@test.com', '回复测试', '我收到了,谢谢!') ON DUPLICATE KEY UPDATE id = id; -- 插入系统默认设置 INSERT INTO system_settings (setting_key, setting_value) VALUES ('smtp_port', '25'), ('pop3_port', '110'), ('domain', 'test.com'), ('mailbox_size_limit', '104857600'), -- 100MB ('smtp_enabled', '1'), ('pop3_enabled', '1'), ('log_path', '/var/log/mailserver'), ('log_max_size', '10485760') -- 10MB ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value); -- 插入服务状态初始记录 INSERT INTO service_status (service_name, is_running) VALUES ('smtp', 0), ('pop3', 0) ON DUPLICATE KEY UPDATE service_name = VALUES(service_name);