36. pepsi-stage-bounce

Schreibt eine Nachricht in eine Zustellungsstatusbenachrichtigung (DSN) um.

36.1. Rolle

pepsi-stage-bounce verwandelt eine Nachricht in eine RFC-3464-DSN — einen Fehler-Bounce oder (auf Anforderung) einen positiven oder einen Delay-Bericht. Eine Zustell-Stage routet eine fehlgeschlagene/zugestellte Nachricht über ihr BOUNCE_STAGE hierher. Die DSN wird unsigniert erzeugt und zu NEXT_STAGE weitergeschaltet (normalerweise pepsi-stage-dkim-sign, dann eine Zustell-Stage). Referenzen: pepsi-stage-bounce(1) / pepsi.conf(5).

36.2. Funktionen

  • Umschreiben an Ort und Stelle in eine DSN (RFC-3464-multipart/report): Der Umschlagabsender wird zum Null-Absender <>, der Empfänger zum ursprünglichen Absender (state.srs.original, wenn pepsi-stage-srs einen festgehalten hat, sonst die Spalte mail_from), und der Nachrichtentext zitiert die ursprünglichen Header; es werden erweiterte RFC-3463-Statuscodes verwendet.

  • RET=FULL (RFC 3461 §6.2): Hat der Absender die ganze Nachricht zurückverlangt, wird der Nachrichtentext geholt — der eine zusätzliche Round-Trip im Baum, der nur für eine solche Nachricht unternommen wird — und vollständig zurückgesendet, es sei denn, er überschreitet RET_FULL_MAX_SIZE (Standardwert 256 KiB, 0 schaltet die Grenze ab); in diesem Fall fällt die DSN auf die Header allein zurück, wie es §6.2 ausdrücklich erlaubt.

  • Vom Betreiber gelieferter Fließtext. Benennt BOUNCE_MESSAGE eine Vorlage, so wird der menschenlesbare Teil der DSN aus bounce-<NAME>.<lang>.body unter [pepsi] TEMPLATE_DIR mit dem vollständigen state des Datensatzes gerendert. <lang> folgt state.language in q-Reihenfolge, mit Rückfall auf en: Der Hinweis geht an den ursprünglichen Absender, und die in dessen Nachricht erkannte Sprache ist der beste verfügbare Anhaltspunkt dafür, was er liest (ohne Spracherkennung auf dem Pfad ist der Hinweis englisch). Jeder Renderfehler fällt auf den eingebauten Text zurück, sodass immer ein Bounce erzeugt wird.

  • NOTIFY-bewusst (RFC 3461): Ein Fehler-Bericht wird nur ausgegeben, wenn NOTIFY FAILURE angefordert hat (der Standardwert bei Abwesenheit) — NOTIFY=NEVER (oder eine Liste ohne FAILURE) verwirft die Nachricht stillschweigend.

  • Drei Berichtsarten, ausgewählt durch state.bounce.kind:

    • permanent → Action: failed (der standardmäßige Fehler-Bounce);

    • success → Action: delivered (nur wenn eine Zustell-Stage es unter ORIGINATE_SUCCESS_DSN + NOTIFY=SUCCESS erzeugt hat);

    • delay → Action: delayed (eine DELAY_DSN_AFTER-Warnung einer Relay-Stage).

  • Spiegelt das ursprüngliche ENVID/ORCPT in Original-Envelope-Id / Original-Recipient, wenn vorhanden.

  • Erzeugt niemals einen Bounce auf einen Bounce (RFC 5321 §6.1): Eine Null-Absender-Nachricht wird gelöscht, nicht umgeschrieben.

  • Keine Netzwerk-E/A: Die umgeschriebene Nachricht wird von demjenigen zugestellt, was NEXT_STAGE benennt; der Bounce bleibt für die DKIM-Sign-Stage unsigniert.

36.3. Konfiguration

[stage-<name>]: PROGRAM = pepsi-stage-bounce, SERVER_NAME (erforderlich; verwendet in ``From:``/``Reporting-MTA``/``Message-ID``), POSTMASTER (das From: des Bounces und die DKIM-Identität; Standardwert postmaster@<SERVER_NAME>), BOUNCE_MESSAGE (der Vorlagenname; nicht gesetzt für den eingebauten Fließtext), RET_FULL_MAX_SIZE (Standardwert 256 KiB) und NEXT_STAGE (erforderlich; normalerweise eine DKIM-Sign-Stage — die DSN wird unsigniert gebaut, ohne eine solche schlägt daher jeder Bounce fehl, nachdem die DSN bereits zusammengestellt wurde). Siehe pepsi.conf(5).

36.4. State

  • Eingaben: state.srs.original (der DSN-Empfänger, falls vorhanden) und state.bounce — kind, diagnostic, failed_recipient, die strukturierten Angaben zum nächsten Hop, die die Relay-Stages festhalten (remote_mta/smtp_code/enhanced_status/phase/reply_text, was auch das Status: der DSN speist), und die kopierten notify/orcpt/envid/ret (eine von Hand eingereihte Nachricht ohne state.bounce ergibt einen generischen Fehlerhinweis). Der Header-Block wird geladen; der Nachrichtentext nur für einen RET=FULL-Bounce.

  • Ausgaben: setzt state auf null — der Bounce ist eine neue Null-Absender-Nachricht, die nichts von der Herkunft des Originals erbt. Dies ist die einzige Stage, die state nicht bewahrt.

36.5. Siehe auch

pepsi-stage-dkim-sign, pepsi-stage-relay-to-internet, pepsi-stage-discard, Unterstützte Funktionen, pepsi-stage-bounce(1), pepsi.conf(5).