X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=public-inbox-learn;h=bb130b215fc686ac82b37ec4351460251e7ef167;hb=e022d3377fd2c50fd9931bf96394728958a90bf3;hp=d770f0f7b348fe82b23f04e62d14a405b5575d59;hpb=8add30044d04c1feccc00a3c5b8f9a0f75c64bf5;p=public-inbox.git diff --git a/public-inbox-learn b/public-inbox-learn index d770f0f7..bb130b21 100755 --- a/public-inbox-learn +++ b/public-inbox-learn @@ -5,7 +5,7 @@ my $usage = "$0 (spam|ham) < /path/to/message"; use strict; use warnings; use PublicInbox::Config; -use Email::Simple; +use Email::MIME; use Email::Address; use IPC::Run qw/run/; my $train = shift or die "usage: $usage\n"; @@ -14,22 +14,18 @@ if ($train !~ /\A(?:ham|spam)\z/) { } my $pi_config = PublicInbox::Config->new; -my $simple; -{ - local $/; - $simple = Email::Simple->new(<>); -} +my $mime = Email::MIME->new(eval { local $/; <> }); # get all recipients my %dests; foreach my $h (qw(Cc To)) { - foreach my $recipient (Email::Address->parse($simple->header($h))) { + foreach my $recipient (Email::Address->parse($mime->header($h))) { $dests{lc($recipient->address)} = 1; } } -my $in = $simple->as_string; -$simple->body_set(""); +my $in = $mime->as_string; +$mime->body_set(''); my $err = 0; my @output = qw(> /dev/null > /dev/null); @@ -54,19 +50,22 @@ foreach my $recipient (keys %dests) { } } } else { # $train eq "ham" - my $from = $simple->header("From"); - my @from = Email::Address->parse($from); - my $name = $from[0]->name; - defined $name or $name = ""; - my $email = $from[0]->address; - defined $email or $email = ""; + require PublicInbox::MDA; + require PublicInbox::Filter; + + # no checking for errors here, we assume the message has + # been reviewed by a human at this point: + PublicInbox::Filter->run($mime); + + my ($name, $email, $date) = + PublicInbox::MDA->author_info($mime); local $ENV{GIT_AUTHOR_NAME} = $name; local $ENV{GIT_AUTHOR_EMAIL} = $email; - local $ENV{GIT_AUTHOR_DATE} = $simple->header("Date"); + local $ENV{GIT_AUTHOR_DATE} = $date; # Ham messages are trained when they're marked into - # a SEEN state, so this is idempotent - run([qw(ssoma-mda -1), $git_dir], \$in, \$out, \$err); + # a SEEN state, so this is idempotent: + run([PublicInbox::MDA->cmd, $git_dir], \$in, \$out, \$err); if ($err !~ /CONFLICT/) { $err = 1; }