commit cb7005430126c0b695fde7d0fc104b29e3031d7a from: Caleb Stein date: Thu Jun 4 19:44:33 2026 UTC parse all email addresses in header commit - 16be890c4586689d348a2039e2346546178311db commit + cb7005430126c0b695fde7d0fc104b29e3031d7a blob - 2bf6ec7036bb6021a02b1dd4545e3522acb40bf8 blob + 5faa75a7a45894b8123e5e89bb5fd63427447fdf --- addrcache.pl +++ addrcache.pl @@ -4,28 +4,17 @@ use strict; use DBI; use File::Path qw(make_path); +use Email::MIME; +use Email::Address::XS; -my ($email, $name); -while (<>) -{ - next unless /From:\s*(.*)/i; +my $raw_hdr = do { local $/; <> }; +my $hdr = Email::MIME->new($raw_hdr); +my @addrs; - my $line = $1; - if ($line =~ /^(.*)\s+<(.*)>$/) - { - $email = $2; - $name = $1; - $name =~ s/^"|"$//g; - } - else - { - $email = $line; - $line =~ s/\s+$//; - $name = ''; - } +push @addrs, Email::Address::XS->parse($hdr->header('To')); +push @addrs, Email::Address::XS->parse($hdr->header('From')); +push @addrs, Email::Address::XS->parse($hdr->header('Cc')); -} - my $db_dir = "$ENV{HOME}/.local/share/addrutils/"; my $db = "addrs.db"; my $dsn = "dbi:SQLite:dbname=$db_dir/$db"; @@ -48,7 +37,10 @@ SQL my $insert_sql = "INSERT OR IGNORE INTO contacts (Email, Name) VALUES (?, ?)"; my $insert = $dbh->prepare($insert_sql); -$insert->execute($email, $name); +foreach my $addr (@addrs) +{ + $insert->execute($addr->address, $addr->phrase); +} $insert->finish; $dbh->disconnect;