admin: Mail-Sperrliste, Markierung nicht erreichbarer Newsrooms (Roadmap 1b.6, Schritt 4)

Admin ▸ Mail-Sperrliste mit Freigabe, manueller Sperre, nicht lesbaren
Rückläufern und Breaker-Zustand. Firmenseite markiert gesperrte
Firmen-E-Mail und Pressekontakte. Die Claim-Seite zählt gesperrte
Adressen nicht mehr als Empfänger und erklärt, warum kein Link geht.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-15 14:01:07 +00:00
parent f9c97ccf2f
commit e7e12b9436
12 changed files with 426 additions and 9 deletions

View file

@ -123,7 +123,7 @@ Für selbst angelegte Firmendaten trägt der Nutzer die Verantwortung. Für die
| ~~1b.3~~ | Kostenlose Profilpflege: Beschreibung, Logo, Bilder, Pressekontakte — **15.09.2026**: Beschreibung durch die Rot-Ebene, reiner Text ohne Links, Stufe 3 der Leiter wird hier geschrieben; **Bilder zurückgestellt** (BALD-Platzhalter) bis die Bild-Kennzeichnung angepasst ist | M | 1b.2 |
| ~~1b.4~~ | Hinweis "Diesen Newsroom verwalten" auf der Profilseite und in der Veröffentlichungsmail — **gebaut 15.09.2026** (E4: Hinweis unten in der Mail; Herkunft `mail_publish` läuft bis auf das Token durch) | S | 1b.2 |
| ~~1b.5~~ | Rückbau: fällt ein Newsroom durch Löschung oder Depublizierung auf null Meldungen, verschwindet die öffentliche Seite mit — **15.09.2026**: alle Admin-Wege (archivieren, Status ändern, löschen) leeren jetzt den Seiten-Cache | S | 1b.1 |
| 1b.6 | Nicht erreichbare Newsrooms aus der Bounce-Suppression im Admin markieren, nicht beanspruchbar, aus allen Mailstrecken ausgenommen | S | Bounce-Suppression live |
| ~~1b.6~~ | Nicht erreichbare Newsrooms aus der Bounce-Suppression im Admin markieren, nicht beanspruchbar, aus allen Mailstrecken ausgenommen — **gebaut 15.09.2026** inkl. der Suppression selbst: zentrale Sperrliste, Versand-Gate, SMTP-Pfad + Circuit Breaker, IMAP-Abholung mit DSN-Parser, Admin ▸ Mail-Sperrliste. Live, sobald `bounce@pressekonto.com` angelegt und in der `.env` eingetragen ist | S | Bounce-Suppression live |
**Leitplanken Profilpflege**
@ -221,7 +221,7 @@ Braucht Betreuungszeit und ist teilweise von Dritten abhängig.
| Vorgang | Blockiert | Grund |
|---|---|---|
| Bounce-Suppression produktiv | 1b.6, 1d.3, 3.2, jede weitere Mailwelle | Zustellbarkeit; ein beschädigter Absenderruf trifft zuerst die Magic Links |
| Bounce-Suppression produktiv — **Code fertig 15.09.2026**, produktiv mit Postfach `bounce@pressekonto.com` + `MAIL_RETURN_PATH` + `BOUNCE_IMAP_*` | 1b.6, 1d.3, 3.2, jede weitere Mailwelle | Zustellbarkeit; ein beschädigter Absenderruf trifft zuerst die Magic Links |
| connektar `ai_declaration` verpflichtend, ~Oktober 2026 | nichts direkt | Termin steht, gehört in die Planung |
| Anwaltstermin, Fünf-Punkte-Agenda | 3.5 | Syndikationsvertrag und Art. 50 Abs. 4 |

View file

@ -1088,3 +1088,26 @@ Zustellbestätigung, Freitext, Abwesenheit).
`BOUNCE_IMAP_HOST=w01eb4f6.kasserver.com`, `BOUNCE_IMAP_USERNAME`/`PASSWORD`
des Postfachs bounce@pressekonto.com, `MAIL_RETURN_PATH=bounce@pressekonto.com`.
Erster Lauf von Hand: `php artisan mail:fetch-bounces --dry-run`.
**Schritt 4 — 1b.6 selbst** (15.09.2026)
- **Admin ▸ Mail-Sperrliste** (`/admin/mail/sperrliste`, Recht
`users:manage`): gesperrte/freigegebene Adressen mit Grund, Quelle,
Zählern; Freigabe mit Rückfrage; manuelle Sperre; die letzten nicht
lesbaren Rückläufer (liegen im Postfach unter „Unparsed"); Zustand des
Circuit Breakers und ob Return-Path/Postfach konfiguriert sind.
- **Firmenseite im Admin:** Badge „E-Mail nicht erreichbar" im Kopf
(verlinkt in die Sperrliste), Markierung an der Firmen-E-Mail und an
jedem gesperrten Pressekontakt.
- **Claim-Seite:** Gesperrte Adressen sind keine Empfänger mehr. Gibt es
Adressen, aber alle sind gesperrt, sagt die Seite, dass die hinterlegte
Adresse nicht erreichbar ist, und verschickt nichts. Die Meldungsseite
zeigt dieselben Empfänger (gleiche Quelle).
- Aus allen Mailstrecken ausgenommen sind gesperrte Adressen bereits seit
Schritt 1 über das Versand-Gate.
Tests: `tests/Feature/MailSuppressionAdminTest.php` (3).
**Damit ist 1b.6 komplett — und Block 1b.** Offen bleibt nur das
Anlegen des Postfachs und die Live-Konfiguration (siehe Deploy-Hinweise
zu Schritt 1 und 3).