42. pepsi-stage-relay-to-lmtp¶
Stellt lokal über LMTP an einen MDA (Dovecot) zu, der Sieve ausführt.
42.1. Rolle¶
pepsi-stage-relay-to-lmtp ist eine lokale Zustell-Stage, die jede Nachricht über LMTP (RFC 2033) an einen Mail Delivery Agent — typischerweise Dovecot — übergibt. Der MDA legt die Nachricht ab und führt dabei das Sieve-Skript (RFC 5228) des Empfängers aus, sodass serverseitige Filterung an den MDA delegiert wird, statt in Pepsi implementiert zu werden. Es ist eine Alternative zu pepsi-stage-relay-to-maildir: LMTP gewinnt Sieve und einen sauberen Zustellstatus je Empfänger und benötigt keinen setuid-Helper (der MDA führt die Zustellung je Benutzer durch), auf Kosten des Betriebs eines lokalen IMAP/LMTP-Servers.
42.2. LMTP-native Zustellung, Zustellen-und-Routen¶
Alle Umschlagempfänger werden in einer LMTP-Transaktion angeboten; der MDA gibt nach dem Ende von DATA eine Antwort pro Empfänger zurück (RFC 2033 §4.2). Die Stage baut nie selbst eine Zustellungsstatusbenachrichtigung — sie stellt zu und routet andernfalls jeden Empfänger nach Grund weiter und hält unter state.bounce fest, warum, damit ein nachgelagertes pepsi-stage-bounce (oder ein Relay) darauf reagieren kann:
2xx— zugestellt; eineNOTIFY=SUCCESS-Benachrichtigung (undDELAY-Warnungen) wird zum optionalenNOTIFY_STAGEgeroutet;eine dauerhafte Ablehnung wird nach ihrem erweiterten RFC-3463-Status geroutet — ein schlechtes Postfach (
x.1.x,x.2.xaußerx.2.2, sowie ein bloßes550ganz ohne erweiterten Status) zuNEXT_STAGE, Quota-Überschreitung (x.2.2) zuQUOTA_LIMIT_STAGE(sonstNEXT_STAGE), eine Sieve-/Richtlinien-Ablehnung (x.7.x) zuSIEVE_REJECT_STAGE(sonstNEXT_STAGE), alles andere zuNEXT_STAGE;4xx— vorübergehend: diesen Empfänger wiederholen (exponentieller Backoff) bisMAX_LIFETIME, dann nach derselben Klassifizierung routen.
Zugestellte, geroutete und noch aufgeschobene Empfänger werden in einer Auffächerung abgeglichen: die zugestellten Empfänger verlassen den Datensatz, jeder geroutete Empfänger wird an seiner Ziel-Stage ein Geschwister-pending-Datensatz, auf sich selbst zugeschnitten (sodass ein Relay-Ziel nie erneut an die anderen zustellt), und der Datensatz wird für die nächste Wiederholung auf die aufgeschobenen Empfänger reduziert. Ein Fehlschlag der gesamten Sitzung (Verbindungsaufbau, STARTTLS, Authentifizierung, Datenübertragung) wiederholt die ganze Nachricht oder routet — wenn er dauerhaft ist oder MAX_LIFETIME überschritten wurde — jeden Empfänger zu NEXT_STAGE.
Weil der MDA die maßgebliche Instanz dafür ist, welche Adressen lokal sind, führt die Stage keine eigene Lokalitätsprüfung durch — platzieren Sie sie nach der Alias-Expansion, sodass nur die als lokal vorgesehenen Empfänger sie erreichen. NEXT_STAGE ist verpflichtend (setzen Sie es auf ein pepsi-stage-bounce, um zu bouncen, oder auf eine Relay-Stage, um nach außerhalb weiterzuleiten); eine Nachricht, die die Stage ohne eines erreicht, wird als failed markiert, bevor der MDA kontaktiert wird, sodass nichts zugestellt wird.
42.3. Transport¶
Das Ziel ist entweder ein UNIX-Domain-Socket (SOCKET, das übliche Dovecot-Layout: kein TLS, keine Zugangsdaten) oder TCP (HOST/PORT, PORT Standardwert 24) mit optionalem TLS = off|starttls|tls und AUTH = none|plain|login|external. Authentifizierung wird über Klartext abgelehnt, sodass jedes AUTH außer none TLS erfordert. Der gemeinsame LMTP-Client verwendet die Transport-, TLS- und SASL-Maschinerie des SMTP-Clients wieder (pepsi_common::smtp::deliver_lmtp).
42.4. Konfiguration¶
[stage-<name>]: PROGRAM = pepsi-stage-relay-to-lmtp, NEXT_STAGE (verpflichtend), die optionalen Grundziele QUOTA_LIMIT_STAGE / SIEVE_REJECT_STAGE / NOTIFY_STAGE, das Ziel (SOCKET, oder HOST/PORT mit TLS, TLS_VERIFY, TLS_CA, TLS_CLIENT_CERT, TLS_CLIENT_KEY, AUTH und dessen USERNAME/PASSWORD), SERVER_NAME (der LHLO-Name; Standardwert ist [pepsi-ingress] HOSTNAME), die Zeitüberschreitungen (CONNECT_TIMEOUT/COMMAND_TIMEOUT/DATA_TIMEOUT) und die Wiederholungsrichtlinie (RETRY_INITIAL/RETRY_MAX_INTERVAL/RETRY_FACTOR/MAX_LIFETIME/ DELAY_DSN_AFTER). pepsi-setup verlangt NEXT_STAGE und prüft, dass jedes der drei Grundziele eine echte Stage benennt. Diese Stage hat kein BOUNCE_STAGE: Sie baut nie selbst eine DSN.
42.5. State¶
Eingaben:
state.dsn(NOTIFY/ORCPTje Empfänger) und die Wiederholungsbuchführung, die sie in einem früheren Durchlauf geschrieben hat.Ausgaben:
state.bounceauf jedem gerouteten Geschwister-Datensatz (hält fest, warum der MDA abgelehnt hat, oder dass die Zustellung für eineSUCCESS-/DELAY-Benachrichtigung gelungen ist) sowieattempts/last_error(dazudelay_sent, sobald eine Verzögerungswarnung geroutet wurde) auf dem zurückgestellten Datensatz.state.dsn.rcptwird im Gleichschritt mit den Empfängern jedes Datensatzes zurechtgeschnitten.
42.6. Siehe auch¶
pepsi-stage-relay-to-maildir, pepsi-stage-aliases, pepsi-stage-bounce, pepsi-quota, Unterstützte Funktionen, pepsi-stage-relay-to-lmtp(1), pepsi.conf(5).