Aller au contenu

Analyse

phil/bounce-parser

BounceParser::parse(string $raw): BounceReport prend un message tel que reçu, champs d'en-tête et corps, et ne lève jamais d'exception. Il lit le message avec Mime\MimeParser, puis essaie chaque lecture dans l'ordre ; la première qui reconnaît le message décide de son ReportFormat.

OrdreFormatReconnu par
1DeliveryStatusUne partie message/delivery-status ou message/global-delivery-status
2FeedbackReportUne partie message/feedback-report
3PlainTextUn expéditeur MAILER-DAEMON, mail-daemon ou postmaster, le chemin de retour nul <>, ou un objet comme en écrivent ces serveurs
4AutoReplyAuto-Submitted autre que no, X-Autoreply, X-Autorespond, Precedence: auto_reply
5UnrecognisedRien de tout cela

Les parties d'un message que contient le rapport ne sont pas fouillées à la recherche d'un rapport : une notification transférée dans un message ne compte pas comme telle. Les rebonds écrits en texte passent avant les réponses automatiques parce que plusieurs serveurs marquent leurs rebonds Auto-Submitted: auto-replied.

Ensuite, les règles sont essayées — voir Règles.

Notifications d'état de remise

La partie d'état est lue comme des groupes de champs séparés par des lignes vides. Chaque groupe qui a un Final-Recipient, ou à défaut un Original-Recipient, est un destinataire : son adresse — le domaine en minuscules —, Action, Status (le code, sans son commentaire), Diagnostic-Code, le code SMTP de base au début du diagnostic, Remote-MTA et Last-Attempt-Date. Un état manquant est cherché dans le diagnostic. Le genre du rapport est le pire de ses destinataires : dur, puis temporaire, puis remis ; une notification sans destinataire est de genre inconnu.

Rebonds écrits en texte

Les parties texte du message, et non celles du message qu'il retourne, jusqu'à la limite de texte, sont fouillées à la recherche de la première adresse qui n'appartient pas à un serveur de courriel, du premier code d'état étendu, et du premier code SMTP en début de ligne ou après un deux-points. Sans code, le genre est inconnu et seule une règle peut trancher ; sans adresse, le rapport ne nomme aucun destinataire.

Réponses automatiques

Le destinataire est le From de la réponse ; le message auquel elle répond est son In-Reply-To, sauf si elle retourne le message.

Le rapport

MembreContient
format, kind, actionComment il a été reconnu, ce qu'il dit, quoi faire — voir Genres et actions
messageLa Mime\Part du message entier
recipientsChaque Recipient que nomme le rapport
feedbackLe FeedbackReport d'un rapport de plainte
originalL'OriginalMessage qu'il concerne — voir Retrouver le message
verpTagL'étiquette du chemin de retour qui l'a reçu, quand un Verp est donné
ruleLe nom de la règle qui a décidé, ou null
authenticSi l'authentificateur s'est porté garant du rapport de plainte
isRecognised()Si son genre est connu
addresses()Les adresses des destinataires pour lesquels le message a échoué, ou de tous quand aucun n'a échoué, chacune une fois