import { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { useNavigate } from 'react-router-dom'; import { emailLogApi, EmailLog } from '../../services/api'; import Card from '../../components/ui/Card'; import Button from '../../components/ui/Button'; import Input from '../../components/ui/Input'; import Badge from '../../components/ui/Badge'; import Modal from '../../components/ui/Modal'; import { ArrowLeft, CheckCircle2, XCircle, Mail, Server, ChevronLeft, ChevronRight } from 'lucide-react'; const CONTEXT_LABELS: Record = { 'consent-link': 'Datenschutz-Link', 'authorization-request': 'Vollmacht-Anfrage', 'customer-email': 'Kunden-E-Mail', 'birthday-greeting': 'Geburtstagsgruß (manuell)', 'birthday-greeting-auto': 'Geburtstagsgruß (automatisch)', 'password-reset': 'Passwort-Reset', }; export default function EmailLogs() { const navigate = useNavigate(); const [page, setPage] = useState(1); const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState(''); const [contextFilter, setContextFilter] = useState(''); const [selectedLog, setSelectedLog] = useState(null); const { data: statsData } = useQuery({ queryKey: ['email-log-stats'], queryFn: () => emailLogApi.getStats(), }); const { data: logsData, isLoading } = useQuery({ queryKey: ['email-logs', page, search, statusFilter, contextFilter], queryFn: () => emailLogApi.getLogs({ page, limit: 30, success: statusFilter || undefined, search: search || undefined, context: contextFilter || undefined, }), }); const stats = statsData?.data; const logs = logsData?.data || []; const pagination = logsData?.pagination; const formatDate = (date: string) => new Date(date).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', }); return (

E-Mail-Versandlog

{/* Statistiken */} {stats && (

{stats.total}

Gesamt

{stats.success}

Erfolgreich

{stats.failed}

Fehlgeschlagen

{stats.last24h}

Letzte 24h

)} {/* Filter */}
{ setSearch(e.target.value); setPage(1); }} />
{/* Log-Tabelle */} {isLoading ? (
Laden...
) : logs.length === 0 ? (
Keine E-Mail-Logs vorhanden.
) : ( <>
{logs.map((log) => ( ))}
Status Zeitpunkt Typ Von An Betreff SMTP
{log.success ? ( ) : ( )} {formatDate(log.sentAt)} {CONTEXT_LABELS[log.context] || log.context} {log.fromAddress} {log.toAddress} {log.subject} {log.smtpServer}:{log.smtpPort}
{/* Pagination */} {pagination && pagination.totalPages > 1 && (

Seite {pagination.page} von {pagination.totalPages} ({pagination.total} Einträge)

)} )}
{/* Detail-Modal */} {selectedLog && ( setSelectedLog(null)} title="E-Mail-Log Details" >
{/* Status */}
{selectedLog.success ? ( Erfolgreich ) : ( Fehlgeschlagen )} {formatDate(selectedLog.sentAt)}
{/* E-Mail-Details */}
Von: {selectedLog.fromAddress} An: {selectedLog.toAddress} Betreff: {selectedLog.subject} Typ: {CONTEXT_LABELS[selectedLog.context] || selectedLog.context} {selectedLog.triggeredBy && ( <> Ausgelöst von: {selectedLog.triggeredBy} )} {selectedLog.messageId && ( <> Message-ID: {selectedLog.messageId} )}
{/* SMTP-Details */}

SMTP-Verbindung

Server: {selectedLog.smtpServer}:{selectedLog.smtpPort} Verschlüsselung: {selectedLog.smtpEncryption} Benutzer: {selectedLog.smtpUser}
{/* SMTP-Antwort */} {selectedLog.smtpResponse && (

SMTP-Antwort

                  {selectedLog.smtpResponse}
                
)} {/* Fehlermeldung */} {selectedLog.errorMessage && (

Fehlermeldung

                  {selectedLog.errorMessage}
                
)}
)}
); }