checkDeliveryStatus($messageId); if (!empty($data)) { $statusMap = ['queued'=>'sent','sent'=>'sent','delivered'=>'delivered','bounced'=>'bounced','failed'=>'failed']; db()->update('email_log', [ 'status' => $statusMap[$data['status']] ?? 'unknown', 'opened' => $data['opened'] ?? 0, 'opened_at' => !empty($data['opened_at']) ? date('Y-m-d H:i:s', strtotime($data['opened_at'])) : null, 'open_count' => $data['open_count'] ?? 0, 'clicked' => $data['clicked'] ?? 0, 'click_count' => $data['click_count'] ?? 0, 'status_checked_at'=> date('Y-m-d H:i:s'), ], 'id = :id', ['id' => $logId]); } } header('Location: /admin/email-log.php' . (!empty($_POST['customer_filter']) ? '?customer=' . urlencode($_POST['customer_filter']) : '')); exit; } // Filters $customerFilter = trim($_GET['customer'] ?? ''); $statusFilter = trim($_GET['status'] ?? ''); $search = trim($_GET['search'] ?? ''); $page = max(1, (int)($_GET['page'] ?? 1)); $perPage = 25; $offset = ($page - 1) * $perPage; $where = []; $params = []; if ($customerFilter) { $where[] = 'l.customer_id = :customer_id'; $params['customer_id'] = $customerFilter; } if ($statusFilter) { $where[] = 'l.status = :status'; $params['status'] = $statusFilter; } if ($search) { $where[] = '(l.recipient_email LIKE :search OR l.subject LIKE :search)'; $params['search'] = '%' . $search . '%'; } $whereClause = $where ? 'WHERE ' . implode(' AND ', $where) : ''; $total = db()->fetch( "SELECT COUNT(*) as cnt FROM email_log l $whereClause", $params )['cnt'] ?? 0; $logs = db()->fetchAll( "SELECT l.*, c.name as customer_name FROM email_log l LEFT JOIN customers c ON l.customer_id = c.customer_id $whereClause ORDER BY l.sent_at DESC LIMIT $perPage OFFSET $offset", $params ); $totalPages = max(1, ceil($total / $perPage)); // Status badge helper $statusBadge = [ 'sent' => ['bg'=>'#3B82F6','label'=>'Sent'], 'delivered' => ['bg'=>'#10B981','label'=>'Delivered'], 'bounced' => ['bg'=>'#EF4444','label'=>'Bounced'], 'failed' => ['bg'=>'#EF4444','label'=>'Failed'], 'unknown' => ['bg'=>'#9CA3AF','label'=>'Unknown'], ]; ?>

Email Log

emails total
Filtered by customer   ×
Reset
Recipient Subject Preview Status Opened Clicked Sent At Actions
No emails found.


1 ? '('.$log['open_count'].')' : '' ?> 1 ? '('.$log['click_count'].')' : '' ?>

checked
1): $window = 2; $pages = []; for ($i = 1; $i <= $totalPages; $i++) { if ($i <= $window || $i > $totalPages - $window || abs($i - $page) <= $window) { $pages[] = $i; } } $pages = array_unique($pages); sort($pages); $qs = '&search=' . urlencode($search) . '&status=' . urlencode($statusFilter) . '&customer=' . urlencode($customerFilter); ?>
1): ?>