false, 'message' => '不支持的统计类型' . $type ]); break; } } else { echo json_encode([ 'success' => false, 'message' => '不支持的请求方法' . $method ]); } } catch (Exception $e) { echo json_encode([ 'success' => false, 'message' => '服务器内部错误: ' . $e->getMessage() ]); } /** * 获取邮件统计 * @param Database $db 数据库实例 */ function getMailStats($db) { // 获取请求参数 $username = isset($_GET['username']) ? $_GET['username'] : ''; $startDate = isset($_GET['startDate']) ? $_GET['startDate'] : ''; $endDate = isset($_GET['endDate']) ? $_GET['endDate'] : ''; // 验证必要参数 if (empty($username)) { echo json_encode([ 'success' => false, 'message' => '缺少用户名参数' ]); return; } // 获取用户邮箱 $user = $db->fetchOne("SELECT email FROM user WHERE username = ?", [$username]); if (!$user) { echo json_encode([ 'success' => false, 'message' => '用户不存在' ]); return; } // 构建查询条件 $where = "WHERE (rcpt_to = ? OR `from` = ?)"; $params = [$user['email'], $user['email']]; if (!empty($startDate)) { $where .= " AND date >= ?"; $params[] = $startDate . " 00:00:00"; } if (!empty($endDate)) { $where .= " AND date <= ?"; $params[] = $endDate . " 23:59:59"; } // 获取邮件类型统计 $typeStats = [ 'inbox' => $db->fetchOne("SELECT COUNT(*) as count FROM email $where AND folder = 'inbox' AND is_deleted = 0", $params)['count'], 'sent' => $db->fetchOne("SELECT COUNT(*) as count FROM email $where AND folder = 'sent' AND is_deleted = 0", $params)['count'], 'draft' => $db->fetchOne("SELECT COUNT(*) as count FROM email $where AND folder = 'draft' AND is_deleted = 0", $params)['count'], 'trash' => $db->fetchOne("SELECT COUNT(*) as count FROM email $where AND folder = 'trash' AND is_deleted = 1", $params)['count'], 'total' => $db->fetchOne("SELECT COUNT(*) as count FROM email $where", $params)['count'] ]; // 获取阅读状态统计 $readStats = [ 'read' => $db->fetchOne("SELECT COUNT(*) as count FROM email WHERE rcpt_to = ? AND is_read = 1 AND is_deleted = 0", [$user['email']])['count'], 'unread' => $db->fetchOne("SELECT COUNT(*) as count FROM email WHERE rcpt_to = ? AND is_read = 0 AND is_deleted = 0", [$user['email']])['count'] ]; echo json_encode([ 'success' => true, 'data' => [ 'typeStats' => $typeStats, 'readStats' => $readStats ] ]); } /** * 获取流量统计 * @param Database $db 数据库实例 */ function getTrafficStats($db) { // 获取请求参数 $username = isset($_GET['username']) ? $_GET['username'] : ''; $startDate = isset($_GET['startDate']) ? $_GET['startDate'] : ''; $endDate = isset($_GET['endDate']) ? $_GET['endDate'] : ''; // 验证必要参数 if (empty($username)) { echo json_encode([ 'success' => false, 'message' => '缺少用户名参数' ]); return; } // 获取用户邮箱 $user = $db->fetchOne("SELECT email FROM user WHERE username = ?", [$username]); if (!$user) { echo json_encode([ 'success' => false, 'message' => '用户不存在' ]); return; } // 构建查询条件 $where = "WHERE (rcpt_to = ? OR `from` = ?)"; $params = [$user['email'], $user['email']]; if (!empty($startDate)) { $where .= " AND date >= ?"; $params[] = $startDate . " 00:00:00"; } if (!empty($endDate)) { $where .= " AND date <= ?"; $params[] = $endDate . " 23:59:59"; } // 获取邮件大小统计 $sizeStats = $db->fetchOne("SELECT SUM(length) as total_size FROM email $where", $params); // 获取邮箱配额 $quota = $db->fetchOne("SELECT quota_bytes, used_bytes FROM mailboxes WHERE username = ?", [$username]); if (!$quota) { $quota = [ 'quota_bytes' => 1073741824, // 1GB默认配额 'used_bytes' => 0 ]; } echo json_encode([ 'success' => true, 'data' => [ 'totalSize' => $sizeStats['total_size'] ?: 0, 'quota' => $quota['quota_bytes'], 'used' => $quota['used_bytes'], 'remaining' => $quota['quota_bytes'] - $quota['used_bytes'] ] ]); } /** * 获取发送统计 * @param Database $db 数据库实例 */ function getSendStats($db) { // 获取请求参数 $username = isset($_GET['username']) ? $_GET['username'] : ''; $startDate = isset($_GET['startDate']) ? $_GET['startDate'] : ''; $endDate = isset($_GET['endDate']) ? $_GET['endDate'] : ''; // 验证必要参数 if (empty($username)) { echo json_encode([ 'success' => false, 'message' => '缺少用户名参数' ]); return; } // 获取用户邮箱 $user = $db->fetchOne("SELECT email FROM user WHERE username = ?", [$username]); if (!$user) { echo json_encode([ 'success' => false, 'message' => '用户不存在' ]); return; } // 构建查询条件 $where = "WHERE `from` = ? AND folder = 'sent' AND is_deleted = 0"; $params = [$user['email']]; if (!empty($startDate)) { $where .= " AND date >= ?"; $params[] = $startDate . " 00:00:00"; } if (!empty($endDate)) { $where .= " AND date <= ?"; $params[] = $endDate . " 23:59:59"; } // 获取发送总量 $totalSent = $db->fetchOne("SELECT COUNT(*) as count FROM email $where", $params)['count']; // 获取每日发送统计 $dailyStats = []; // 构建每日统计查询 $dailyQuery = "SELECT DATE(date) as date, COUNT(*) as count FROM email $where GROUP BY DATE(date) ORDER BY date ASC"; $dailyResult = $db->fetchAll($dailyQuery, $params); if ($dailyResult) { foreach ($dailyResult as $row) { $dailyStats[] = [ 'date' => $row['date'], 'count' => $row['count'] ]; } } echo json_encode([ 'success' => true, 'data' => [ 'totalSent' => $totalSent, 'dailyStats' => $dailyStats ] ]); }