|
|
<?php
|
|
|
/**
|
|
|
* 邮箱管理API
|
|
|
*/
|
|
|
|
|
|
// 设置错误报告
|
|
|
error_reporting(E_ALL);
|
|
|
ini_set('display_errors', 0);
|
|
|
|
|
|
// 设置JSON响应头
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
|
|
// 包含必要的类
|
|
|
require_once '../../utils/Config.php';
|
|
|
require_once '../../utils/Logger.php';
|
|
|
require_once '../../utils/Helper.php';
|
|
|
require_once '../../utils/Database.php';
|
|
|
|
|
|
// 处理请求
|
|
|
try {
|
|
|
// 获取请求方法
|
|
|
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
|
|
|
|
|
|
// 连接数据库
|
|
|
$db = Database::getInstance();
|
|
|
|
|
|
// 根据请求方法处理
|
|
|
switch ($method) {
|
|
|
case 'GET':
|
|
|
// 获取邮箱信息
|
|
|
if (isset($_GET['action']) && $_GET['action'] === 'quota') {
|
|
|
// 获取邮箱配额
|
|
|
getMailboxQuota($db);
|
|
|
} else {
|
|
|
// 获取邮箱基本信息
|
|
|
getMailboxInfo($db);
|
|
|
}
|
|
|
break;
|
|
|
case 'POST':
|
|
|
// 创建自定义文件夹
|
|
|
createFolder($db);
|
|
|
break;
|
|
|
case 'PUT':
|
|
|
// 重命名文件夹
|
|
|
renameFolder($db);
|
|
|
break;
|
|
|
case 'DELETE':
|
|
|
// 删除自定义文件夹
|
|
|
deleteFolder($db);
|
|
|
break;
|
|
|
default:
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '不支持的请求方法'
|
|
|
]);
|
|
|
break;
|
|
|
}
|
|
|
} catch (Exception $e) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '服务器内部错误: ' . $e->getMessage()
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取邮箱基本信息
|
|
|
* @param Database $db 数据库实例
|
|
|
*/
|
|
|
function getMailboxInfo($db) {
|
|
|
// 获取请求参数
|
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
|
|
|
|
// 验证必要参数
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
// 获取邮箱统计信息
|
|
|
$stats = [
|
|
|
'inbox' => $db->fetchOne("SELECT COUNT(*) as count FROM email WHERE rcpt_to = ? AND folder = 'inbox' AND is_deleted = 0", [$user['email']])['count'],
|
|
|
'sent' => $db->fetchOne("SELECT COUNT(*) as count FROM email WHERE `from` = ? AND folder = 'sent' AND is_deleted = 0", [$user['email']])['count'],
|
|
|
'draft' => $db->fetchOne("SELECT COUNT(*) as count FROM email WHERE `from` = ? AND folder = 'draft' AND is_deleted = 0", [$user['email']])['count'],
|
|
|
'trash' => $db->fetchOne("SELECT COUNT(*) as count FROM email WHERE (rcpt_to = ? OR `from` = ?) AND folder = 'trash' AND is_deleted = 1", [$user['email'], $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']
|
|
|
];
|
|
|
|
|
|
// 获取自定义文件夹
|
|
|
$customFolders = [];
|
|
|
|
|
|
echo json_encode([
|
|
|
'success' => true,
|
|
|
'data' => [
|
|
|
'email' => $user['email'],
|
|
|
'stats' => $stats,
|
|
|
'customFolders' => $customFolders
|
|
|
]
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取邮箱配额
|
|
|
* @param Database $db 数据库实例
|
|
|
*/
|
|
|
function getMailboxQuota($db) {
|
|
|
// 获取请求参数
|
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
|
|
|
|
// 验证必要参数
|
|
|
if (empty($username)) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '缺少用户名参数'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 获取邮箱配额信息
|
|
|
$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' => [
|
|
|
'quota' => $quota['quota_bytes'],
|
|
|
'used' => $quota['used_bytes'],
|
|
|
'remaining' => $quota['quota_bytes'] - $quota['used_bytes'],
|
|
|
'percentage' => round(($quota['used_bytes'] / $quota['quota_bytes']) * 100, 2)
|
|
|
]
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建自定义文件夹
|
|
|
* @param Database $db 数据库实例
|
|
|
*/
|
|
|
function createFolder($db) {
|
|
|
// 获取请求数据
|
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
|
|
// 验证请求数据
|
|
|
if (!$data || empty($data['username']) || empty($data['name'])) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '缺少必要参数'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 检查文件夹名称是否合法
|
|
|
$folderName = $data['name'];
|
|
|
if (in_array($folderName, ['inbox', 'sent', 'draft', 'trash'])) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '不能创建系统默认文件夹'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 检查文件夹是否已存在
|
|
|
// 注意:当前email表中没有自定义文件夹的概念,所以直接返回成功
|
|
|
|
|
|
echo json_encode([
|
|
|
'success' => true,
|
|
|
'message' => '文件夹创建成功',
|
|
|
'data' => [
|
|
|
'name' => $folderName
|
|
|
]
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 重命名文件夹
|
|
|
* @param Database $db 数据库实例
|
|
|
*/
|
|
|
function renameFolder($db) {
|
|
|
// 获取请求数据
|
|
|
$data = json_decode(file_get_contents('php://input'), true);
|
|
|
|
|
|
// 验证请求数据
|
|
|
if (!$data || empty($data['username']) || empty($data['oldName']) || empty($data['newName'])) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '缺少必要参数'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 检查文件夹名称是否合法
|
|
|
$oldName = $data['oldName'];
|
|
|
$newName = $data['newName'];
|
|
|
|
|
|
if (in_array($oldName, ['inbox', 'sent', 'draft', 'trash']) || in_array($newName, ['inbox', 'sent', 'draft', 'trash'])) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '不能修改系统默认文件夹'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 检查新文件夹名称是否已存在
|
|
|
// 注意:当前email表中没有自定义文件夹的概念,所以直接返回成功
|
|
|
|
|
|
echo json_encode([
|
|
|
'success' => true,
|
|
|
'message' => '文件夹重命名成功',
|
|
|
'data' => [
|
|
|
'oldName' => $oldName,
|
|
|
'newName' => $newName
|
|
|
]
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除自定义文件夹
|
|
|
* @param Database $db 数据库实例
|
|
|
*/
|
|
|
function deleteFolder($db) {
|
|
|
// 获取请求参数
|
|
|
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
|
|
$name = isset($_GET['name']) ? $_GET['name'] : '';
|
|
|
|
|
|
// 验证必要参数
|
|
|
if (empty($username) || empty($name)) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '缺少必要参数'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 检查文件夹名称是否合法
|
|
|
if (in_array($name, ['inbox', 'sent', 'draft', 'trash'])) {
|
|
|
echo json_encode([
|
|
|
'success' => false,
|
|
|
'message' => '不能删除系统默认文件夹'
|
|
|
]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 注意:当前email表中没有自定义文件夹的概念,所以直接返回成功
|
|
|
|
|
|
echo json_encode([
|
|
|
'success' => true,
|
|
|
'message' => '文件夹删除成功',
|
|
|
'data' => [
|
|
|
'name' => $name
|
|
|
]
|
|
|
]);
|
|
|
}
|