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.languagefehlt), wird die Bewertung gegen die Pseudo-Verteilungnone;q=1berechnet.noneselbst darf inWHITELIST/BLACKLISTstehen, sodass der Operator über das Schicksal nicht erkannter Mail entscheidet (noneauf die schwarze Liste zu setzen bewertet sie mit−1, auf die weiße mit+1, sie nirgends aufzuführen belässt sie bei0).Umgehung über die weiße Liste. Eine Nachricht, die ein ausdrückliches Urteil
state.spam = falseträ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 zuNEXT_STAGEweiter.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_STAGEweiter (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-statezuBOUNCE_STAGEum, sodass pepsi-stage-bounce nur dann einen Bounce ausgibt, wenn dasNOTIFYdes AbsendersFAILUREanfordert (der Standardwert, wenn es fehlt). Kein Header wird angefasst.softschaltet die Nachricht stattdessen zuNEXT_STAGEweiter, hängtSUBJECT_FLAG_LABEL(Standardwert[!LANG]) an ihrSubject:an und fügt einenX-Pepsi-Detected-Languages-Header hinzu. Nichts wird gebounct, also wird keinBOUNCE_STAGEbenö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 alsnone;q=1behandelt) und, für eine blockierte Nachricht,state.dsnund der Umschlagempfänger.Ausgaben: Auf dem Durchlasspfad bleibt
stateunberührt; auf dem harten Blockierpfad werden die Failure-DSN-Schlüssel zusammengeführt, die pepsi-stage-bounce verbraucht (state.bounce); auf dem weichen Pfad bleibtstateunberührt, und stattdessen wird der Header-Block umgeschrieben.Übergänge: Bewertung über
THRESHOLD→ weiterschalten zuNEXT_STAGE; Bewertung darauf oder darunter → umleiten zuBOUNCE_STAGE(hard) oder markiert weiterschalten zuNEXT_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).