commit - 16be890c4586689d348a2039e2346546178311db
commit + cb7005430126c0b695fde7d0fc104b29e3031d7a
blob - 2bf6ec7036bb6021a02b1dd4545e3522acb40bf8
blob + 5faa75a7a45894b8123e5e89bb5fd63427447fdf
--- addrcache.pl
+++ addrcache.pl
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";
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;