true]); $ergebnisse = []; foreach ($teilnehmer as $person) { $email = trim((string)($person['email'] ?? '')); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $ergebnisse[] = ['name' => $person['display_name'], 'email' => $email, 'status' => 'ohne_email']; continue; } $subject = 'Kaffeeliste - Dein aktueller Stand'; $body = saas_render_balance_mail_body( $person['display_name'], (int)$person['balance_cents'], $settings, $dashboardUrl ); if ($dryRun) { saas_log_outbound_email($pdo, $tenantId, $person['participant_id'], 'balance_notice', $subject, 'dry_run', null, $createdByUserId); $ergebnisse[] = ['name' => $person['display_name'], 'email' => $email, 'status' => 'dry_run']; continue; } $sendResult = saas_send_mail($email, $subject, $body); if ($sendResult['ok']) { saas_log_outbound_email($pdo, $tenantId, $person['participant_id'], 'balance_notice', $subject, 'sent', null, $createdByUserId); $ergebnisse[] = ['name' => $person['display_name'], 'email' => $email, 'status' => 'sent']; } else { saas_log_outbound_email($pdo, $tenantId, $person['participant_id'], 'balance_notice', $subject, 'failed', $sendResult['error'] ?? 'unbekannter Fehler', $createdByUserId); $ergebnisse[] = ['name' => $person['display_name'], 'email' => $email, 'status' => 'failed']; } } if (!$dryRun) { app_audit_log($pdo, $tenantId, $createdByUserId, 'mail_broadcast.sent', 'tenant', $tenantId, ['empfaenger' => count($ergebnisse)]); // Post-Redirect-Get: Ergebnis in die Session legen und per GET erneut // anzeigen, damit ein Browser-Refresh nicht erneut versendet. $_SESSION['flash_mailversand'] = ['tenant_id' => $tenantId, 'ergebnisse' => $ergebnisse]; header('Location: mailversenden.php'); exit; } } $log = $hasAccess ? saas_fetch_outbound_email_log($pdo, $tenantId, 20) : []; function mailversenden_status_label(string $status): string { return match ($status) { 'sent' => 'Versendet', 'failed' => 'Fehlgeschlagen', 'dry_run' => 'Dry-Run (nicht versendet)', 'ohne_email' => 'Keine E-Mail-Adresse', default => $status, }; } include "header.php"; include "headerline.php"; include "nav.php"; ?>