mail: zentrale Bounce-Suppression mit Versand-Gate und Circuit Breaker (Roadmap 1b.6, Schritte 1–2)
email_suppressions/email_bounces als Zustand und Ereignis-Log; ein MessageSending-Listener streicht gesperrte Empfänger aus JEDER ausgehenden Mail und setzt den Return-Path. Zweiter Aufnahmepfad: SMTP-Ablehnungen im Worker — 5.1.x sperrt den Empfänger, Relay-Ablehnungen zählen für den Circuit Breaker, der den Versand anhält statt gesunde Adressen zu sperren. X-Pk-Ref-Header auf den Mails, API-Meldungen fallen auf die Firmen-E-Mail zurück, der Bounce-Import schreibt in die zentrale Liste. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
87f95fb7a7
commit
0a658bb34b
25 changed files with 1312 additions and 4 deletions
|
|
@ -34,9 +34,20 @@ trait Unsubscribable
|
|||
|
||||
public function headers(): Headers
|
||||
{
|
||||
return new Headers(text: [
|
||||
return new Headers(text: array_filter([
|
||||
'List-Unsubscribe' => '<'.$this->unsubscribeUrl.'>',
|
||||
'List-Unsubscribe-Post' => 'List-Unsubscribe=One-Click',
|
||||
]);
|
||||
// Bounce-Referenz (Roadmap 1b.6), sofern die Mailable eine hat.
|
||||
(string) config('bounces.reference_header', 'X-Pk-Ref') => $this->bounceReference(),
|
||||
]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ein DSN bringt die Original-Header zurück; hiermit ordnet der
|
||||
* Bounce-Parser den Rückläufer dem Datensatz zu. Mailables überschreiben.
|
||||
*/
|
||||
public function bounceReference(): ?string
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue