Changelog
phil/bounce-parserPas encore traduite
Cette page n’est pas encore traduite en français ; elle est montrée en anglais.
All notable changes to phil/bounce-parser will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
0.1.0-alpha - 2026-11-11
Added
Mime\MimeParser,Mime\PartandMime\Headers: header fields unfolded, encoded words (RFC 2047) decoded on request, media types and their parameters, base64 and quoted-printable bodies, multiparts split at their boundaries,message/rfc822andmessage/globalread as the message they hold, digests; never throws, and bounded byLimits— octets read, depth, parts, header fields, text.BounceParser: delivery status notifications, abuse reports, bounces written as text and automatic replies, in that order, returning aBounceReportwith itsReportFormat,BounceKind,BounceAction,Recipients,FeedbackReport,OriginalMessage, VERP tag and deciding rule; never throws and keeps no state between calls.- Delivery status notifications (RFC 3464, RFC 6533): each recipient's final and original address,
DeliveryAction, status, diagnostic, basic SMTP code, remote server and last attempt; the worst kind among the recipients. StatusCode(RFC 3463):parse(),find()in a text, class, subject and detail,isAboutTheMessage()for a full mailbox, a message too long or a refusal by policy,describe().Recipient::kindOfFailure(): hard for a permanent failure against the mailbox, soft otherwise, from the status code or the SMTP code.- Abuse reports (RFC 5965, RFC 6591):
FeedbackReportwith every field andFeedbackType; a complaint unsubscribes only when theContract\ReportAuthenticatorvouches for it, and goes to review otherwise;not-spamignored,auth-failurereviewed. Auth\AuthenticationResults, which vouches for a report whoseAuthentication-Results(RFC 8601), written under one of the application's authserv-ids, records a DKIM pass for a trusted domain, andAuth\TrustEveryReport.- Bounces written as text: from
MAILER-DAEMONorpostmaster, with the null return path or a subject such servers write; the first address of the text, its first status or SMTP code, the kind unknown without one. - Automatic replies (RFC 3834):
Auto-Submittedother thanno,X-Autoreply,X-Autorespond,Precedence: auto_reply; the message answered by itsIn-Reply-To. OriginalMessage:messageId(),feedbackId()and any field of the message a report returns, whole or as headers.Verp: return paths with a tag,encode(),encodeRecipient(),decode()anddecodeRecipient(), and signed tags,encodeSigned()anddecodeSigned()with an HMAC-SHA256 under the application's key; read from theDelivered-To,X-Original-ToandEnvelope-Tofields of the bounce, never fromTo, or from theenvelopeFieldsgiven toBounceParser.Rule\Rule,Rule\Rules,Rule\FieldandRule\RuleScope: rules on a regular expression or a text, on the subject, the sender, the text, the diagnostics or a named field, each with its kind and action, tried in their order on unrecognised messages or on every message; placed at the end, before or after a rule by name.BounceAction::for(), the action of eachBounceKind.Exception\BounceParserException, implemented byInvalidLimits,InvalidRuleandInvalidVerp.- The fuzz target
bounce-parser, with its seeds. - The documentation in
doc/, one file per topic, indexed by the README. CONTRIBUTING.md,SECURITY.mdandCODE_OF_CONDUCT.md.