52. pepsi-stage-block-language

Eine Nachricht anhand der in ihrem Nachrichtentext erkannten menschlichen Sprache(n) routen.

52.1. Rolle

pepsi-stage-block-language ist ein Sprachrichtlinien-Filter. Er bewertet die unter state.language festgehaltene(n) Sprache(n) (vorgelagert von pepsi-stage-detect-language geschrieben) gegen eine konfigurierte weiße und schwarze Liste und routet die Nachricht: oberhalb der Bewertungsschwelle THRESHOLD wird sie zu NEXT_STAGE weitergeschaltet, andernfalls entscheidet ENFORCEMENT — hard (der Standardwert) leitet sie mit einem Failure-DSN-state zu BOUNCE_STAGE um, soft stellt sie dennoch zu, mit markiertem Subject:. Der Nachrichtentext wird nie geladen (der Header-Block schon, weil der weiche Modus einen Header umschreibt), und die Stage pausiert nie. Referenz: pepsi-stage-block-language(1).

52.2. Bewertung

state.language ist eine Zeichenkette im HTTP-Accept-Language-Stil aus code;q=quality-Elementen, wobei jede quality die Erkennungswahrscheinlichkeit dieser Sprache ist. Die Stage fasst sie zu einer einzigen Zahl zusammen:

score = Σ q over languages listed in WHITELIST
      − Σ q over languages listed in BLACKLIST

Sprachen auf keiner der beiden Listen tragen nichts bei. Mit Englisch auf der weißen und Französisch auf der schwarzen Liste ergibt en;q=0.7, fr;q=0.3 die Bewertung 0.7 − 0.3 = 0.4. Eine Nachricht, deren Bewertung strikt größer als THRESHOLD ist, schaltet weiter; andernfalls wird sie blockiert.

  • Nicht erkannte Mail. Wurde keine Sprache erkannt (state.language fehlt), wird die Bewertung gegen die Pseudo-Verteilung none;q=1 berechnet. none selbst darf in WHITELIST/BLACKLIST stehen, sodass der Operator über das Schicksal nicht erkannter Mail entscheidet (none auf die schwarze Liste zu setzen bewertet sie mit −1, auf die weiße mit +1, sie nirgends aufzuführen belässt sie bei 0).

  • Umgehung über die weiße Liste. Eine Nachricht, die ein ausdrückliches Urteil state.spam = false trägt — gesetzt von einem vorgelagerten Treffer in pepsi-stage-check-whitelist oder von Ingress für das reservierte Postfach <Postmaster> (RFC 5321 §4.5.1) —, überspringt die Sprachrichtlinie vollständig und schaltet zu NEXT_STAGE weiter.

  • Für einen Bounce nie einen Bounce erzeugen. Eine Nachricht, die bereits ein Bounce ist (der Null-Umschlagabsender), schaltet unabhängig von ihrer Bewertung zu NEXT_STAGE weiter (RFC 5321 §6.1).

52.3. Harte und weiche Durchsetzung

ENFORCEMENT entscheidet, was mit einer Nachricht geschieht, die an der Richtlinie scheitert, und beide Modi wählen genau dieselbe Menge von Nachrichten aus — das ist der Sinn der Sache: Die Markierung sagt den Bounce voraus, sodass ein Operator WHITELIST/BLACKLIST/THRESHOLD an echtem Verkehr abstimmen kann, bevor überhaupt Mail abgewiesen wird.

  • hard (der Standardwert) leitet mit einem permanenten Failure-DSN-state zu BOUNCE_STAGE um, sodass pepsi-stage-bounce nur dann einen Bounce ausgibt, wenn das NOTIFY des Absenders FAILURE anfordert (der Standardwert, wenn es fehlt). Kein Header wird angefasst.

  • soft schaltet die Nachricht stattdessen zu NEXT_STAGE weiter, hängt SUBJECT_FLAG_LABEL (Standardwert [!LANG]) an ihr Subject: an und fügt einen X-Pepsi-Detected-Languages-Header hinzu. Nichts wird gebounct, also wird kein BOUNCE_STAGE benötigt.

Weil ENFORCEMENT die Stage über die Einstellungsschicht je Adresse erreicht, kann ein einzelnes Konto im Training sein, während der Rest der Installation durchsetzt. Das Subject: umzuschreiben bricht die DKIM-Signatur des Urhebers und unser eigenes ARC-AMS, die es beide mitsignieren — auf einem Zweig, der in der lokalen Zustellung endet, ist das kostenlos, auf einem, der weiterleitet, nicht, sodass der weiche Modus auf den ersteren gehört.

52.4. Fusion

Die Stage hat den Standardwert FUSION = yes: Unter dem vereinheitlichten pepsi-Binärprogramm mit eingeschaltetem [pepsi] ALLOW_FUSION (dem Standardwert) darf ein Vorgänger sie in seinem eigenen Worker-Prozess ausführen, statt sie separat zu dispatchen. Siehe pepsi-dispatch.

52.5. Konfiguration

[stage-<name>]: PROGRAM = pepsi-stage-block-language, NEXT_STAGE (erforderlich — jede Nachricht, die die Stage nicht blockiert, schaltet dorthin weiter, einschließlich eines Absenders auf der weißen Liste, eines Bounces und jeder Nachricht, die unter ``ENFORCEMENT = soft`` lediglich markiert wurde), BOUNCE_STAGE, die Sprachlisten WHITELIST/BLACKLIST (mindestens eine muss nicht leer sein, sonst würde jede Nachricht scheitern), der numerische THRESHOLD (Standardwert 0.0), ENFORCEMENT (hard — der Standardwert — oder soft) und SUBJECT_FLAG_LABEL (Standardwert [!LANG], nur im weichen Modus verwendet). pepsi-setup lehnt einen ungültigen Sprachcode oder eine Überlappung zwischen den beiden Listen ab und warnt vor ENFORCEMENT = hard ohne BOUNCE_STAGE (die erste blockierte Nachricht würde scheitern) sowie vor einer BLACKLIST mit leerer WHITELIST und nicht negativem THRESHOLD. Siehe pepsi-stage-block-language(1) und Konfiguration.

52.6. State

  • Eingaben: state.language (fehlt es, wird es als none;q=1 behandelt) und, für eine blockierte Nachricht, state.dsn und der Umschlagempfänger.

  • Ausgaben: Auf dem Durchlasspfad bleibt state unberührt; auf dem harten Blockierpfad werden die Failure-DSN-Schlüssel zusammengeführt, die pepsi-stage-bounce verbraucht (state.bounce); auf dem weichen Pfad bleibt state unberührt, und stattdessen wird der Header-Block umgeschrieben.

  • Übergänge: Bewertung über THRESHOLD → weiterschalten zu NEXT_STAGE; Bewertung darauf oder darunter → umleiten zu BOUNCE_STAGE (hard) oder markiert weiterschalten zu NEXT_STAGE (soft).

52.7. Siehe auch

pepsi-stage-detect-language, pepsi-stage-check-whitelist, pepsi-stage-bounce, Unterstützte Funktionen, pepsi-stage-block-language(1).