36. pepsi-stage-bounce

Réécrire un message en une notification d’état de remise (DSN).

36.1. Rôle

pepsi-stage-bounce transforme un message en un DSN RFC 3464 — un rebond d’échec, ou (sur demande) un rapport positif ou de délai. Une étape de remise achemine ici un message échoué ou remis via son BOUNCE_STAGE. Le DSN est produit non signé et avancé vers NEXT_STAGE (normalement pepsi-stage-dkim-sign, puis une étape de remise). Références : pepsi-stage-bounce(1) / pepsi.conf(5).

36.2. Fonctionnalités

  • Réécriture sur place en un DSN (multipart/report RFC 3464) : l’expéditeur d’enveloppe devient l’expéditeur nul <>, le destinataire devient l’expéditeur d’origine (state.srs.original lorsque pepsi-stage-srs en a noté un, sinon la colonne mail_from), et le corps cite les en-têtes d’origine ; les codes d’état étendus de la RFC 3463 sont utilisés.

  • RET=FULL (RFC 3461 §6.2) : lorsque l’expéditeur a demandé le retour du message entier, le corps est chargé — l’unique aller-retour supplémentaire de l’arborescence, effectué uniquement pour un tel message — et renvoyé intégralement, sauf s’il dépasse RET_FULL_MAX_SIZE (par défaut 256 Kio, 0 pour désactiver la limite), auquel cas le DSN se rabat sur les seuls en-têtes, comme le §6.2 l’autorise explicitement.

  • Texte fourni par l’opérateur. Lorsque BOUNCE_MESSAGE nomme un modèle, la partie lisible par un humain du DSN est rendue à partir de bounce-<NAME>.<lang>.body sous [pepsi] TEMPLATE_DIR, avec l’intégralité du state de la ligne. <lang> suit state.language dans l’ordre des q, avec repli sur en : l’avis est adressé à l’expéditeur d’origine, et la langue détectée dans son message est le meilleur indicateur disponible de ce qu’il lit (sans détection sur le chemin, l’avis est en anglais). Tout échec de rendu se rabat sur le texte intégré, de sorte qu’un rebond est toujours produit.

  • Tient compte de NOTIFY (RFC 3461) : un rapport d”échec n’est émis que lorsque NOTIFY a demandé FAILURE (la valeur par défaut en son absence) — NOTIFY=NEVER (ou une liste sans FAILURE) abandonne le message silencieusement.

  • Trois sortes de rapport, sélectionnées par state.bounce.kind :

    • permanent → Action: failed (le rebond d’échec par défaut) ;

    • success → Action: delivered (seulement lorsqu’une étape de remise l’a émis sous ORIGINATE_SUCCESS_DSN + NOTIFY=SUCCESS) ;

    • delay → Action: delayed (un avertissement DELAY_DSN_AFTER d’une étape de relais).

  • Renvoie en écho les ENVID/ORCPT d’origine dans Original-Envelope-Id / Original-Recipient lorsqu’ils sont présents.

  • Ne fait jamais rebondir un rebond (RFC 5321 §6.1) : un message à expéditeur nul est supprimé, non réécrit.

  • Aucune E/S réseau : le message réécrit est remis par ce que nomme NEXT_STAGE ; le rebond est laissé non signé pour l’étape de signature DKIM.

36.3. Configuration

[stage-<name>] : PROGRAM = pepsi-stage-bounce, SERVER_NAME (obligatoire ; utilisé dans ``From:``/``Reporting-MTA``/``Message-ID``), POSTMASTER (le From: du rebond et l’identité DKIM ; par défaut postmaster@<SERVER_NAME>), BOUNCE_MESSAGE (le nom du modèle ; non réglé, le texte intégré est utilisé), RET_FULL_MAX_SIZE (par défaut 256 Kio) et NEXT_STAGE (obligatoire ; normalement une étape de signature DKIM — le DSN est construit non signé, donc sans elle chaque rebond échoue une fois le DSN déjà composé). Voir pepsi.conf(5).

36.4. État

  • Entrées : state.srs.original (le destinataire du DSN, lorsqu’il est présent) et state.bounce — kind, diagnostic, failed_recipient, le détail structuré du saut suivant que les étapes de relais enregistrent (remote_mta/smtp_code/enhanced_status/phase/reply_text, qui alimente aussi le Status: du DSN), et les notify/orcpt/envid/ret copiés (un message mis en file à la main sans state.bounce produit un avis d’échec générique). Le bloc d’en-têtes est chargé ; le corps ne l’est que pour un rebond RET=FULL.

  • Sorties : remet state à null — le rebond est un nouveau message à expéditeur nul qui n’hérite d’aucune provenance de l’original. C’est la seule étape qui ne préserve pas state.

36.5. Voir aussi

pepsi-stage-dkim-sign, pepsi-stage-relay-to-internet, pepsi-stage-discard, Fonctionnalités prises en charge, pepsi-stage-bounce(1), pepsi.conf(5).