Screenshots und Verträge geprüft und in nachweise/ zusammengeführt; Binärdateien per .gitignore ausgeschlossen (vertraulich, Kunden- und Organisationsnummern, Größe). Vertragsübersicht mit Fassungen, Daten und Drittlandgrundlagen. Versandfassung: DPF-Status Cloudflare vom 13.10.2026, OpenAI-DPA unterzeichnet am 13.10.2026. Juli-Zahlen auf Live bestätigt. Protokollzeile v1.9.0 im Git-Deploy-Dokument. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.6 KiB
Juli-Mails: Empfängerregel und Versandzahlen (BN-08)
Stand: 13.10.2026. Vorbelegt aus der lokalen Kopie der Live-Datenbank und am 13.10.2026 auf Live bestätigt (Befehl unten): Kampagne #1 sent, 10/10/0/0; Kampagne #2 sent, 970/954/5/11, Protokollzeilen 497 versendet und 3 fehlgeschlagen; Kampagne #3 Entwurf ohne Empfänger.
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.