fix parsing message headers with addresses that need double quotes

we are using Go's net/mail to parse message headers. it can parse addresses,
and properly decodes email addresses with double quotes (e.g. " "@example.com).
however, it gives us an address without the double quotes in the localpart,
effectively an invalid address. we now have a workaround to parse such
not-quite-addresses.

for issue #199 reported by gene-hightower, thanks for reporting!
This commit is contained in:
Mechiel Lukkien
2024-08-22 16:03:52 +02:00
parent 79b641cdc6
commit 016fde8d78
4 changed files with 29 additions and 3 deletions

View File

@ -497,9 +497,9 @@ func parseAddressList(log mlog.Log, h mail.Header, k string) []Address {
for _, a := range l {
// todo: parse more fully according to ../rfc/5322:959
var user, host string
addr, err := smtp.ParseAddress(a.Address)
addr, err := smtp.ParseNetMailAddress(a.Address)
if err != nil {
log.Infox("parsing address (continuing)", err, slog.Any("address", a.Address))
log.Infox("parsing address (continuing)", err, slog.Any("netmailaddress", a.Address))
} else {
user = addr.Localpart.String()
host = addr.Domain.ASCII