Commit Diff


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;