Nachher-Liste vom 13.10.2026: ein Admin-Konto mit Passkey und TOTP, Super-Admin, keine Editoren, Zugänge außerhalb der Anwendung nur beim Inhaber. Versandfassung D3 und Klärung U13 nachgezogen. Tinker-Befehl für die Juli-Kampagnen nutzt status->value (Enum). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.5 KiB
Juli-Mails: Empfängerregel und Versandzahlen (BN-08)
Stand: 13.10.2026, vorbelegt aus der lokalen Kopie der Live-Datenbank (letzter Eintrag 07.10.2026). Die Zahlen werden vor dem Versand des Pakets auf Live bestätigt (Befehl unten).
Empfängerregel
Die Regel steht in app/Services/Newsletter/CampaignRecipients.php. Sie gilt für beide Mails: aktive Konten mit E-Mail-Adresse, ohne Newsletter-Abmeldung. Dazu kommen je Mail die gespeicherten Filter:
| Filter laut Kampagne | In einem Satz | |
|---|---|---|
| #1 Bestandsvertrag | legacy_contract: true, login: within, login_months: 12 |
Konten mit laufendem Bestandsvertrag (Zahlungsvereinbarung „grandfathered“) und Anmeldung in den letzten 12 Monaten. |
| #2 Aktive Konten | login: between 0–12 Monate, exclude_campaign_id: 1 |
Konten mit Anmeldung in den letzten 12 Monaten, ohne die Empfänger von Mail #1. |
Begründung (Betreiber, 13.10.2026): Die Beschränkung auf Konten mit Anmeldung in den letzten 12 Monaten war Absicht; die Filter wurden dafür gebaut. Konten ohne Anmeldung seit über einem Jahr gelten als nicht mehr genutzt und wurden nicht angeschrieben. Das gilt auch für Bestandsverträge ohne Anmeldung in diesem Zeitraum.
Anzahl
| Empfänger laut Kampagne | versendet | fehlgeschlagen | übersprungen | Einträge „E-Mail versendet“ im Aktivitätsverlauf | |
|---|---|---|---|---|---|
| #1 | 10 | 10 | 0 | 0 | 11 (21.07.2026, 12:20–16:31) |
| #2 | 970 | 954 | 5 | 11 | 955 (22.07.2026, 10:35–19:34) |
Auffälligkeiten, auf Live zu klären:
- Bei Mail #1 gibt es einen Eintrag mehr im Aktivitätsverlauf als in der Kampagne. Wahrscheinlich eine Testmail um 12:20, vor dem eigentlichen Versand um 16:31.
- Die Einzelprotokoll-Tabelle
newsletter_campaign_recipientsenthält zu Mail #2 nur 500 Zeilen (497 versendet, 3 fehlgeschlagen). Kampagnenzähler und Aktivitätsverlauf nennen dagegen rund 955.
Prüfung auf Live
php artisan tinker --execute '
foreach (App\Models\NewsletterCampaign::query()->orderBy("id")->get() as $c) {
echo $c->id." | ".$c->status->value." | ".$c->subject." | total ".$c->recipients_total." | sent ".$c->sent_count." | failed ".$c->failed_count." | skipped ".$c->skipped_count." | ".$c->sent_at.PHP_EOL;
echo " Protokollzeilen: ".json_encode(DB::table("newsletter_campaign_recipients")->where("newsletter_campaign_id", $c->id)->selectRaw("status, count(*) n")->groupBy("status")->pluck("n", "status")).PHP_EOL;
}'
Gegenprobe im Admin: Berichte ▸ Aktivität, Typ „E-Mail“, Suche nach dem Betreff.