85.1.14. pepsi-stage-relay-to-lmtp

deliver a message to a local MDA (Dovecot) over LMTP

Section du manuel:

1

85.1.14.1.1. Nom

pepsi-stage-relay-to-lmtp - l’étape de remise locale LMTP du pipeline Pepsi.

85.1.14.1.2. Synopsis

pepsi-stage-relay-to-lmtp [GLOBAL-OPTIONS] worker

85.1.14.1.3. Description

pepsi-stage-relay-to-lmtp est un programme d’étape exécuté par pepsi-dispatch(1). Il charge la ligne pepsi.workqueue (refusant d’agir si son status n’est pas running), lit sa section [stage-<stage>], et remet le message à un Mail Delivery Agent — typiquement Dovecot — via LMTP (RFC 2033) pour la remise locale finale. Le MDA applique le script Sieve (RFC 5228) de chaque destinataire au moment où il classe le courrier, de sorte que le filtrage côté serveur (fileinto, vacation, redirect, pose d’indicateurs, …) est fourni par le MDA plutôt que par Pepsi.

L’étape est native LMTP : chaque destinataire d’enveloppe est proposé en une seule transaction LMTP et le MDA renvoie une réponse distincte par destinataire après la fin du DATA. L’étape elle-même ne construit jamais de notification d’état de remise — elle remet, et sinon achemine chaque destinataire plus loin vers une étape configurée, en notant pourquoi sous state.bounce afin qu’une pepsi-stage-bounce(1) en aval (ou un relais) puisse agir dessus. Le sort de chaque destinataire suit sa réponse :

  • 2xx — remis ; le destinataire quitte la ligne. Lorsque le destinataire a demandé NOTIFY=SUCCESS et que [pepsi] ORIGINATE_SUCCESS_DSN est activé, une notification positive est acheminée vers le NOTIFY_STAGE facultatif.

  • un rejet permanent est acheminé par motif, classé d’après le code d’état étendu RFC 3463 de la réponse : une mauvaise boîte aux lettres de destination (x.1.x, ou x.2.x autre que x.2.2, ou un simple 550 utilisateur inconnu sans code d’état étendu) va vers UNKNOWN_MAILBOX_STAGE lorsque le destinataire appartient à l’un des LOCAL_DOMAINS, sinon vers NEXT_STAGE ; un rejet pour dépassement de quota (x.2.2) vers QUOTA_LIMIT_STAGE (sinon NEXT_STAGE) ; un rejet Sieve / de politique locale (x.7.x) vers SIEVE_REJECT_STAGE (sinon NEXT_STAGE) ; tout le reste vers NEXT_STAGE.

  • 4xx (par exemple serveur occupé) — un échec transitoire : le destinataire est réessayé avec un backoff exponentiel jusqu’à MAX_LIFETIME, puis acheminé selon la même classification par motif.

Un message peut donc être partiellement traité : les destinataires remis, acheminés et différés sont réconciliés en un seul fan-out — les destinataires remis quittent la ligne, chaque destinataire acheminé devient une ligne sœur pending (réduite à ce seul destinataire, de sorte qu’une cible de relais ne remet jamais à nouveau à ses sœurs) à son étape cible, et la ligne d’origine est réduite aux seuls destinataires encore différés pour le prochain réessai. Un avertissement DELAY (lorsqu’il est dû et que NOTIFY=DELAY a été demandé) est acheminé de même vers NOTIFY_STAGE. Le fan-out et la fin propre de la ligne (supprimée, ou mise en pause pour le réessai) forment une seule instruction : le MDA a déjà classé les destinataires remis, et un découpage validé sans sa fin les laisserait sur une ligne que le réessai remettrait à nouveau. Si cette instruction échoue (la base de données est injoignable), l’erreur est réessayée et les destinataires acceptés par le MDA sont remis une seconde fois — la remise est « au moins une fois ».

Un échec de la session entière — la connexion, le message d’accueil, STARTTLS, l’authentification ou le transfert des données, avant toute réponse par destinataire — n’est pas propre à un destinataire : un échec transitoire réessaie tout le message avec un délai croissant, et un échec permanent (ou tout échec une fois MAX_LIFETIME écoulé) achemine chaque destinataire vers NEXT_STAGE sans classification de la raison.

Comme le MDA décide quelles adresses sont locales, cette étape n’effectue aucun test de localité propre (contrairement à pepsi-stage-relay-to-maildir(1)) : chaque destinataire est proposé au MDA. LOCAL_DOMAINS décide seulement où va ensuite une boîte aux lettres inconnue. Sur l’un de nos propres domaines, elle ne doit pas atteindre une étape de relais — le relais chercherait notre propre MX et renverrait le message tout droit à cet hôte — elle va donc vers UNKNOWN_MAILBOX_STAGE ; sur tout autre domaine (une cible d’alias développée hors site), elle poursuit vers NEXT_STAGE. Placez l’étape là où n’arrivent que les destinataires censés être locaux — habituellement après l’expansion d’alias (pepsi-stage-aliases(1)). Elle n’est pas terminale : NEXT_STAGE est obligatoire — réglez-le sur une pepsi-stage-bounce(1) pour faire rebondir les destinataires non remettables, ou sur une étape de relais pour les transférer hors site. Un message qui atteint l’étape sans NEXT_STAGE configuré est marqué failed avant que le MDA soit contacté, de sorte que rien n’est remis.

Contrairement à l’écriture Maildir locale, LMTP n’a besoin d”aucun helper privilégié : le MDA effectue lui-même la remise par utilisateur, de sorte que cette étape s’exécute sous l’utilisateur pepsi non privilégié et ne porte aucun bit setuid/setgid. Elle est pliée dans le binaire pepsi unifié.

85.1.14.1.4. Options

Mode d’exécution :

worker

S’exécute comme un worker persistant de pepsi-dispatch(1), lisant les identifiants de ligne workqueue sur l’entrée standard.

Configuration (dans la propre section [stage-<name>] de l’étape) :

PROGRAM

Doit être pepsi-stage-relay-to-lmtp.

NEXT_STAGE

Obligatoire. Où est acheminé un destinataire que le MDA n’a pas pu remettre (une mauvaise boîte aux lettres de destination, et le repli pour les motifs ci-dessous). Réglez-le sur une pepsi-stage-bounce(1) pour faire rebondir les destinataires non remettables, ou sur une étape de relais (par exemple pepsi-stage-srs(1) → un smarthost) pour les transférer hors site. pepsi-setup rejette une configuration qui en est dépourvue.

QUOTA_LIMIT_STAGE

Où acheminer un destinataire que le MDA a refusé pour dépassement de quota (RFC 3463 x.2.2). Par défaut NEXT_STAGE. Réglez-le sur une étape de rebond lorsque NEXT_STAGE est un relais, afin que les rejets pour quota provoquent un rebond plutôt qu’un relais hors site.

SIEVE_REJECT_STAGE

Où acheminer un destinataire refusé par Sieve / la politique locale (RFC 3463 x.7.x). Par défaut NEXT_STAGE.

UNKNOWN_MAILBOX_STAGE

Où acheminer un destinataire de l’un des LOCAL_DOMAINS que le MDA a refusé comme boîte aux lettres inconnue (x.1.x, un simple 550). Par défaut NEXT_STAGE. Réglez-le sur une étape de rebond dès que NEXT_STAGE peut atteindre un relais : relayer une adresse inconnue de notre propre domaine la remet à cet hôte. pepsi-setup --wizard le règle sur bounce.

LOCAL_DOMAINS

Les domaines dont le MDA détient les boîtes aux lettres (séparés par des espaces ou des virgules). Par défaut [pepsi-ingress] ACCEPTED_DOMAINS. Lu pour UNKNOWN_MAILBOX_STAGE, ainsi que par le contrôle des destinataires de pepsi-ingress(1), qui demande au MDA si une adresse de ces domaines existe avant de l’accepter (voir VERIFY_RECIPIENTS).

NOTIFY_STAGE

Où sont acheminés les notifications de remise positives SUCCESS et les avertissements DELAY (sous la forme d’un message cloné portant state.bounce.kind) ; réglez-le sur une pepsi-stage-bounce(1), qui produit le rapport. À défaut, aucune notification positive ni de délai n’est générée. L’étape ne construit jamais de notification elle-même.

SOCKET

Chemin de la socket de domaine UNIX LMTP du MDA (par exemple /run/dovecot/lmtp). Disposition habituelle de la remise locale ; pas de TLS ni d’authentification. Exactement l’un de SOCKET et HOST doit être défini.

HOST / PORT

Atteindre plutôt le MDA via TCP (PORT vaut 24 par défaut). À utiliser pour un MDA sur un autre hôte.

TLS

Sécurité du transport pour une cible HOST : off (par défaut), starttls, ou tls (implicite). TLS_VERIFY (yes par défaut) et TLS_CA contrôlent la vérification PKIX ; TLS_CLIENT_CERT/TLS_CLIENT_KEY présentent un certificat client pour le TLS mutuel / SASL EXTERNAL.

AUTH

Mécanisme SASL pour une cible TCP : none (par défaut), plain, login ou external. L’authentification est refusée en clair, de sorte que tout AUTH autre que none exige TLS = starttls ou tls (et external exige un certificat client). USERNAME/PASSWORD fournissent l’identifiant.

SERVER_NAME

Nom annoncé dans LHLO et estampillé dans l’en-tête Received:. Par défaut [pepsi-ingress] HOSTNAME.

MAX_LIFETIME, RETRY_INITIAL, RETRY_MAX_INTERVAL, RETRY_FACTOR

Cadençage des réessais et de l’abandon pour les destinataires différés transitoirement.

DELAY_DSN_AFTER

Émettre un DSN « delayed » unique une fois qu’un message encore non remis a passé cette durée en file et que l’expéditeur a demandé NOTIFY=DELAY.

CONNECT_TIMEOUT, COMMAND_TIMEOUT, DATA_TIMEOUT

Timeouts LMTP par opération.

85.1.14.1.5. Voir aussi

pepsi-dispatch(1), pepsi-stage-relay-to-maildir(1), pepsi-stage-aliases(1), pepsi-stage-bounce(1), pepsi.conf(5), pepsi.state(7).

RFC 2033 (LMTP), RFC 5228 (Sieve).