Hello.
In conclusion, the following patch is needed.
---
../Mail-SpamAssassin-4.0.1.orig/lib/Mail/SpamAssassin/Plugin/TxRep.pm
2024-03-26 13:52:09.000000000 +0900
+++ ../Mail-SpamAssassin-4.0.1/lib/Mail/SpamAssassin/Plugin/TxRep.pm
2024-06-01 05:09:01.496565000 +0900
@@ -1967,10 +1967,13 @@
sub forget_message {
###########################################################################
my ($self, $params) = @_;
return 0 unless ($self->{conf}->{use_txrep});
my $pms = ($self->{last_pms})? $self->{last_pms} :
Mail::SpamAssassin::PerMsgStatus->new($self->{main}, $params->{msg});
+ if (!defined $pms->{relays_internal} && !defined
$pms->{relays_external}) {
+ $pms->extract_message_metadata();
+ }
dbg("TxRep: forgetting a message");
$self->{forgetting} = 1;
my $ret = $self->check_senders_reputation($pms);
$self->{forgetting} = undef;
The three additional lines are a copy of learn_message immediately
above.
Probably unnecessary if forget_message is called from line 1349.
However, it is necessary when called as $sa->learn($msg, $id=undef,
$isspam=1, $forget=1) as in sa-learn.
Below is a demonstration.
abstract code
$sa->learn($msg, $id=undef, $isspam=1, $forget=0);
dump_tx_reputation();
$sa->learn($msg, $id=undef, $isspam=1, $forget=1);
dump_tx_reputation();
Without patch
---
123.123.123.123|ip=none: 1
123.123.123.123|ip=none|totscore: 20
6e4a149a9841940055d7dc4e85c0c750aef09cfb@sa_generated|ip=none: 2
6e4a149a9841940055d7dc4e85c0c750aef09cfb@sa_generated|ip=none|totscore:
40
host.name|ip=123.123: 1
host.name|ip=123.123|totscore: 20
u...@host.name|ip=123.123: 1
u...@host.name|ip=123.123|totscore: 20
u...@host.name|ip=none: 1
u...@host.name|ip=none|totscore: 20
---
123.123.123.123|ip=none: 1
123.123.123.123|ip=none|totscore: 20
host.name|ip=123.123: 1
host.name|ip=123.123|totscore: 20
host.name|ip=none: 1 <-----------------
host.name|ip=none|totscore: -20 <-----------------
u...@host.name|ip=123.123: 1
u...@host.name|ip=123.123|totscore: 20
u...@host.name|ip=none: 1
u...@host.name|ip=none|totscore: 0
With patch
---
123.123.123.123|ip=none: 1
123.123.123.123|ip=none|totscore: 20
6e4a149a9841940055d7dc4e85c0c750aef09cfb@sa_generated|ip=none: 2
6e4a149a9841940055d7dc4e85c0c750aef09cfb@sa_generated|ip=none|totscore:
40
host.name|ip=123.123: 1
host.name|ip=123.123|totscore: 20
u...@host.name|ip=123.123: 1
u...@host.name|ip=123.123|totscore: 20
u...@host.name|ip=none: 1
u...@host.name|ip=none|totscore: 20
---
123.123.123.123|ip=none: 1
123.123.123.123|ip=none|totscore: 0
host.name|ip=123.123: 1
host.name|ip=123.123|totscore: 0
u...@host.name|ip=123.123: 1
u...@host.name|ip=123.123|totscore: 0
u...@host.name|ip=none: 1
u...@host.name|ip=none|totscore: 0
Thanks.