false, 'message' => '不支持的请求方法' ]); break; } } catch (Exception $e) { echo json_encode([ 'success' => false, 'message' => '服务器内部错误: ' . $e->getMessage() ]); } /** * 获取邮件列表 * @param Database $db 数据库实例 */ function getEmailList($db) { // 获取请求参数 $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $perPage = isset($_GET['perPage']) ? (int)$_GET['perPage'] : 10; $folder = isset($_GET['folder']) ? $_GET['folder'] : 'inbox'; $search = isset($_GET['search']) ? $_GET['search'] : ''; $isRead = isset($_GET['isRead']) ? $_GET['isRead'] : null; $username = isset($_GET['username']) ? $_GET['username'] : ''; // 验证必要参数 if (empty($username)) { echo json_encode([ 'success' => false, 'message' => '缺少用户名参数' ]); return; } // 构建查询条件 $where = "WHERE rcpt_to = (SELECT email FROM user WHERE username = ?) AND folder = ? AND is_deleted = 0"; $params = [$username, $folder]; if (!empty($search)) { $where .= " AND (subject LIKE ? OR `from` LIKE ? OR `to` LIKE ?)"; $searchParam = "%$search%"; $params[] = $searchParam; $params[] = $searchParam; $params[] = $searchParam; } if ($isRead !== null) { $where .= " AND is_read = ?"; $params[] = (int)$isRead; } // 计算偏移量 $offset = ($page - 1) * $perPage; // 查询总数 $totalSql = "SELECT COUNT(*) as total FROM email $where"; $totalResult = $db->fetchOne($totalSql, $params); $total = $totalResult['total']; // 查询邮件列表 $sql = "SELECT id, `from`, `to`, subject, date, folder, is_read, is_deleted FROM email $where ORDER BY date DESC LIMIT ? OFFSET ?"; $params[] = $perPage; $params[] = $offset; $emails = $db->fetchAll($sql, $params); // 返回响应 echo json_encode([ 'success' => true, 'data' => [ 'emails' => $emails, 'total' => $total, 'page' => $page, 'perPage' => $perPage, 'totalPages' => ceil($total / $perPage) ] ]); } /** * 获取邮件详情 * @param Database $db 数据库实例 * @param string $id 邮件ID */ function getEmailDetails($db, $id) { // 获取请求参数 $username = isset($_GET['username']) ? $_GET['username'] : ''; // 验证必要参数 if (empty($username)) { echo json_encode([ 'success' => false, 'message' => '缺少用户名参数' ]); return; } // 查询邮件详情 $sql = "SELECT * FROM email WHERE id = ? AND rcpt_to = (SELECT email FROM user WHERE username = ?)"; $email = $db->fetchOne($sql, [$id, $username]); if ($email) { // 标记为已读 if (!$email['is_read']) { $db->execute("UPDATE email SET is_read = 1 WHERE id = ?", [$id]); $email['is_read'] = 1; } echo json_encode([ 'success' => true, 'data' => [ 'email' => $email ] ]); } else { echo json_encode([ 'success' => false, 'message' => '邮件不存在或无权访问' ]); } } /** * 发送邮件或保存草稿 * @param Database $db 数据库实例 */ function saveEmail($db) { // 获取请求数据 $data = json_decode(file_get_contents('php://input'), true); // 验证请求数据 if (!$data || empty($data['username']) || empty($data['to']) || empty($data['subject'])) { echo json_encode([ 'success' => false, 'message' => '缺少必要参数' ]); return; } // 获取用户邮箱 $user = $db->fetchOne("SELECT email FROM user WHERE username = ?", [$data['username']]); if (!$user) { echo json_encode([ 'success' => false, 'message' => '用户不存在' ]); return; } // 构建邮件数据 $emailData = [ 'id' => uniqid(), 'from' => $user['email'], 'to' => $data['to'], 'subject' => $data['subject'], 'date' => date('Y-m-d H:i:s'), 'content' => isset($data['content']) ? $data['content'] : '', 'folder' => isset($data['isDraft']) && $data['isDraft'] ? 'draft' : 'sent', 'is_read' => 1, // 已发送的邮件自动标记为已读 'is_deleted' => 0, 'created_at' => date('Y-m-d H:i:s') ]; // 保存邮件到email表 $sql = "INSERT INTO email (id, `from`, `to`, subject, date, data, folder, is_read, is_deleted, created_at, mail_from, rcpt_to) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $db->insert($sql, [ $emailData['id'], $emailData['from'], $emailData['to'], $emailData['subject'], $emailData['date'], $emailData['content'], $emailData['folder'], $emailData['is_read'], $emailData['is_deleted'], $emailData['created_at'], $emailData['from'], $emailData['to'] ]); echo json_encode([ 'success' => true, 'message' => isset($data['isDraft']) && $data['isDraft'] ? '草稿保存成功' : '邮件发送成功', 'data' => [ 'emailId' => $emailData['id'] ] ]); } /** * 更新邮件(标记为已读/未读、移动文件夹等) * @param Database $db 数据库实例 */ function updateEmail($db) { // 获取请求数据 $data = json_decode(file_get_contents('php://input'), true); // 验证请求数据 if (!$data || empty($data['id']) || empty($data['username'])) { echo json_encode([ 'success' => false, 'message' => '缺少必要参数' ]); return; } // 构建更新字段 $updateFields = []; $params = []; if (isset($data['isRead'])) { $updateFields[] = "is_read = ?"; $params[] = (int)$data['isRead']; } if (isset($data['folder'])) { $updateFields[] = "folder = ?"; $params[] = $data['folder']; } if (empty($updateFields)) { echo json_encode([ 'success' => false, 'message' => '没有需要更新的字段' ]); return; } // 添加邮件ID和用户名参数 $params[] = $data['id']; $params[] = $data['username']; // 更新邮件 $sql = "UPDATE email SET " . implode(', ', $updateFields) . " WHERE id = ? AND rcpt_to = (SELECT email FROM user WHERE username = ?)"; $db->execute($sql, $params); echo json_encode([ 'success' => true, 'message' => '邮件更新成功' ]); } /** * 删除邮件 * @param Database $db 数据库实例 */ function deleteEmail($db) { // 获取请求参数 $id = isset($_GET['id']) ? $_GET['id'] : ''; $username = isset($_GET['username']) ? $_GET['username'] : ''; // 验证必要参数 if (empty($id) || empty($username)) { echo json_encode([ 'success' => false, 'message' => '缺少必要参数' ]); return; } // 软删除邮件 $sql = "UPDATE email SET is_deleted = 1, folder = 'trash' WHERE id = ? AND rcpt_to = (SELECT email FROM user WHERE username = ?)"; $db->execute($sql, [$id, $username]); echo json_encode([ 'success' => true, 'message' => '邮件删除成功' ]); }