0) $pdo->prepare("UPDATE mail_queue SET status = 'pending', next_attempt_at = ? WHERE id = ? AND status IN ('pending','failed')")->execute([$now, $id]); else $pdo->prepare("UPDATE mail_queue SET next_attempt_at = ? WHERE status = 'pending'")->execute([$now]); $r = mail_queue_run($pdo, $id > 0 ? 1 : 50); flash($r['sent'] > 0 || $r['failed'] === 0 ? 'success' : 'error', $r['sent'] . ' Mail(s) gesendet' . ($r['failed'] > 0 ? ', ' . $r['failed'] . ' weiterhin fehlgeschlagen (Fehler steht in der Liste).' : '.')); } elseif ($action === 'requeue_failed') { $pdo->prepare("UPDATE mail_queue SET status = 'pending', attempts = 0, next_attempt_at = ? WHERE status = 'failed'")->execute([db_now()]); flash('success', 'Aufgegebene Mails werden erneut versucht.'); } elseif ($action === 'delete' && $id > 0) { $pdo->prepare('DELETE FROM mail_queue WHERE id = ?')->execute([$id]); audit_log($admin['id'], "Mail #{$id} aus der Warteschlange gelöscht"); flash('success', 'Mail gelöscht.'); } elseif ($action === 'purge') { $n = $pdo->exec("DELETE FROM mail_queue WHERE status IN ('sent','failed')"); audit_log($admin['id'], 'Erledigte und aufgegebene Mails aus der Warteschlange gelöscht'); flash('success', (int) $n . ' Eintrag/Einträge gelöscht.'); } } catch (Throwable $e) { flash('error', 'Aktion nicht möglich: ' . $e->getMessage()); } redirect('/staff/mail_queue.php'); } $counts = mail_queue_counts($pdo); $rows = []; try { $rows = $pdo->query("SELECT id, to_email, subject, status, attempts, next_attempt_at, last_error, created_at, sent_at FROM mail_queue ORDER BY (CASE status WHEN 'pending' THEN 0 WHEN 'failed' THEN 1 ELSE 2 END), id DESC LIMIT 200")->fetchAll(); } catch (Throwable $e) { $rows = []; } $statusLabels = ['pending' => ['Wartet auf nächsten Versuch', 'warning'], 'failed' => ['Aufgegeben', 'danger'], 'sent' => ['Nachträglich gesendet', 'success']]; $pageTitle = 'Mail-Warteschlange'; $activePage = 'mail_queue'; require __DIR__ . '/_header.php'; ?>

Mail-Warteschlange

Scheitert der Mailversand (zum Beispiel weil der SMTP-Server nicht erreichbar ist), merkt sich DeskHub die Mail und versucht es alle paar Minuten erneut: nach 5, 10, 20, 40 Minuten und dann in größeren Abständen, höchstens 10-mal und höchstens 48 Stunden lang. Danach gilt sie als aufgegeben und bleibt hier zum manuellen Nachsenden. Test-Mails kommen nicht in die Warteschlange.

Wartend
Aufgegeben
Nachträglich gesendet

Mails in der Warteschlange

Die Warteschlange ist leer. Alle Mails sind rausgegangen.

StatusEmpfängerBetreffVersucheNächster VersuchLetzter Fehler
seit
= 200): ?>

Es werden die ersten 200 Einträge angezeigt.