Patches
Fixed in 4.6.2. Upgrade with pip install --upgrade mail-parser.
Candidate addresses are now selected by position, not by appearance — a bracketed address
the sender wrote is byte-identical to one the MTA wrote, so no amount of pattern matching
can tell them apart:
- the first token of the
from clause is the HELO name, whatever its shape, and is never a
candidate;
- an explicit HELO marker inside a comment group is sender text and is excluded;
- a candidate must sit inside a
( / [ group;
- IPv4 and IPv6 matches are merged positionally, never family-first;
- the walk stops at the first trusted hop naming no address, rather than continuing into
sender-written headers.
The IPv6 pattern was corrected to skip the IPv6: tag and to prefer the longest valid form.
Behaviour change. get_server_ipaddress() now returns None rather than an unreliable
value in two cases that previously returned an address: a from clause consisting of a bare
address with no HELO marker (indistinguishable from EHLO <that address>), and a trusted hop
naming no address at all. Callers must handle None.
Workarounds
None within mail-parser. Callers who cannot upgrade should not treat the return value of
get_server_ipaddress() as trustworthy, and should derive sender attribution from an
authenticated signal instead — the MTA's own logs, or SPF/DKIM/DMARC results computed
outside this library.
References
Patches
Fixed in 4.6.2. Upgrade with
pip install --upgrade mail-parser.Candidate addresses are now selected by position, not by appearance — a bracketed address
the sender wrote is byte-identical to one the MTA wrote, so no amount of pattern matching
can tell them apart:
fromclause is the HELO name, whatever its shape, and is never acandidate;
(/[group;sender-written headers.
The IPv6 pattern was corrected to skip the
IPv6:tag and to prefer the longest valid form.Behaviour change.
get_server_ipaddress()now returnsNonerather than an unreliablevalue in two cases that previously returned an address: a
fromclause consisting of a bareaddress with no HELO marker (indistinguishable from
EHLO <that address>), and a trusted hopnaming no address at all. Callers must handle
None.Workarounds
None within mail-parser. Callers who cannot upgrade should not treat the return value of
get_server_ipaddress()as trustworthy, and should derive sender attribution from anauthenticated signal instead — the MTA's own logs, or SPF/DKIM/DMARC results computed
outside this library.
References