}
}
+# TODO: deal with multiple List-ID headers?
+sub inbox_for_list_id ($$) {
+ my ($klass, $config, $simple) = @_;
+
+ # newer Email::Simple allows header_raw, as does Email::MIME:
+ my $list_id = $simple->can('header_raw') ?
+ $simple->header_raw('List-Id') :
+ $simple->header('List-Id');
+ my $ibx;
+ if (defined $list_id && $list_id =~ /<[ \t]*(.+)?[ \t]*>/) {
+ $ibx = $config->lookup_list_id($1);
+ }
+ $ibx;
+}
+
1;
$im->done;
});
} else {
- require PublicInbox::MDA if $train eq "ham";
+ require PublicInbox::MDA;
# get all recipients
my %dests; # address => <PublicInbox::Inbox|0(false)>
}
# n.b. message may be cross-posted to multiple public-inboxes
+ my %seen;
while (my ($addr, $ibx) = each %dests) {
next unless ref($ibx); # $ibx may be 0
+ next if $seen{"$ibx"}++;
remove_or_add($ibx, $train, $addr);
}
+ my $ibx = PublicInbox::MDA->inbox_for_list_id($pi_config, $mime);
+ if ($ibx && !$seen{"$ibx"}) {
+ remove_or_add($ibx, $train, $ibx->{-primary_address});
+ }
}
if ($err) {
$dst = $config->lookup($recipient); # first check
}
if (!defined $dst) {
- my $list_id = $simple->header('List-Id');
- if (defined $list_id && $list_id =~ /<[ \t]*(.+)?[ \t]*>/) {
- $dst = $config->lookup_list_id($1);
- }
+ $dst = PublicInbox::MDA->inbox_for_list_id($config, $simple);
if (!defined $dst && !defined $recipient) {
die "ORIGINAL_RECIPIENT not defined in ENV\n";
}