+ {/* Search controls */}
+
+
+
+ Search Delivered Mail
+ — find messages that passed through Mimecast
+
+
+
+
+
+
+
+
+ setTo(e.target.value)}
+ onKeyDown={e => e.key === 'Enter' && search()}
+ className="w-full border rounded-md px-3 py-1.5 text-sm bg-background" />
+
+
+
+ setFrom(e.target.value)}
+ onKeyDown={e => e.key === 'Enter' && search()}
+ className="w-full border rounded-md px-3 py-1.5 text-sm bg-background" />
+
+
+
+ setSubject(e.target.value)}
+ onKeyDown={e => e.key === 'Enter' && search()}
+ className="w-full border rounded-md px-3 py-1.5 text-sm bg-background" />
+
+
+
+
+
+
+
+
+ {!to && !from && !subject && (
+
Enter at least one search field
+ )}
+
+
+
+ {loadError && (
+
{loadError}
+ )}
+
+ {loading && (
+
+
+ Searching message logs…
+
+ )}
+
+ {/* Summary stats */}
+ {loaded && !loading && messages.length > 0 && (
+
+
+ Total
+ {messages.length}
+
+ {highRisk > 0 && (
+
+
+ {highRisk} high spam score (≥10)
+
+ )}
+ {medRisk > 0 && (
+
+
+
{medRisk} moderate spam score (5–9)
+
+ )}
+
+
+ {messages.length - highRisk - medRisk} clean
+
+
+ )}
+
+ {/* Filters + sort */}
+ {loaded && !loading && messages.length > 0 && (
+
+ {statuses.length > 1 && (
+
+ )}
+
+ {filtered.length !== messages.length && (
+ {filtered.length} of {messages.length} shown
+ )}
+
+ )}
+
+ {loaded && !loading && messages.length === 0 && (
+
+ No messages found for this search. Try a broader time range or different search terms.
+
+ )}
+
+ {loaded && !loading && filtered.length > 0 && (
+
+
+
+
+
+ | Date |
+ To |
+ From |
+ Subject |
+ Status |
+ Spam |
+ |
+
+
+
+ {filtered.map((m: any) => (
+ = 10 ? 'bg-red-500/5' : m.spamScore >= 5 ? 'bg-amber-500/5' : ''}`}>
+ |
+ {new Date(m.received).toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })}
+ |
+
+ {m.to}
+ |
+
+ {m.from}
+ {m.fromEnv && m.fromEnv !== m.from && (
+ {m.fromEnv}
+ )}
+ |
+
+ {m.subject || '(no subject)'}
+ |
+
+ {m.status}
+ |
+
+ = 10 ? 'text-red-600' : m.spamScore >= 5 ? 'text-amber-600' : 'text-muted-foreground'}`}>
+ {m.spamScore}
+
+ |
+
+
+ |
+
+ ))}
+
+
+
+
+ )}
+
+
setAnalysisMessage(null)} />
+
+ );
+}
+
// ── Page ──────────────────────────────────────────────────────────────────────
export default function MimecastSyncPage() {
const [statusData, setStatusData] = useState