Email Module Received header parser

The email module lacks a customized parser for the Received header. This is understandable since the Received header has only de-facto standardization with plenty of variety. Nonetheless, I needed a best-effort parser for my email filtering, and am happy with the results.

As an example, this source text:

Received: from mail-northcentralusazon11023100.outbound.protection.outlook.com ([40.107.201.100] helo=CH4PR04CU002.outbound.protection.outlook.com) by mx.serverdomain.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from <info@senderdomain.com>) id 1viFZv-00FTF0-RT for user@receverdomain.com; Tue, 20 Jan 2026 12:32:58 -0500

can be parsed into these object properties:

helo:  CH4PR04CU002.outbound.protection.outlook.com
ipaddress:  40.107.201.100
revdns:
rcvby:  mx.serverdomain.com
protocol:  esmtps
recipient:  user@receverdomain.com
servermsgid:  1viFZv-00FTF0-RT
encryption:  TLS1.3 TLS_AES_256_GCM_SHA384
viatext:  Exim 4.94.2
globalip:  True
timestamp:  2026-01-20 17:32:58
fcdnsHelo:  False
fcdnsRdns:  False
envelopefrom:  info@senderdomain.com