Reformatting spam score in subject?

Jeff Morris jeffm859 at
Wed Mar 29 11:55:18 CEST 2017

And to follow-up on my previous follow-up (sorry, it's late here and I'm 
tired) :-) ...

The "1+" I mentioned was actually "0+" originally... I had changed it to 
1+ while debugging this. Oops. So my final changed is actually a bit 

   {  $1 eq 'SCORE'     ? (sprintf("%07.3f",$spam_level))

I'm not really sure why the "0+" was there originally. I'm sure there's 
some subtle need for it that I'm missing. Possibly the idea was to 
truncate the score to a precision of 3, rather than right-pad to a 
precision of 3? In any event, for my purposes it works as above, simply 
eliminating the "0+" and adding my preferred formatting to the sprintf, 
since I want my score both left-padded and right-padded with zeros for 
easy sorting.

Hopefully if anyone else is trying to accomplish the same this will help 
them out!

On 3/29/2017 2:32 AM, Jeff Morris wrote:
> After a few more hours of hacking away at this, I finally solved it!
> I was actually on the right track when I mentioned the $subject_tag 
> parsing code on line 16373 in my previous email. That is in fact the 
> code that gets executed for $sa_spam_subject_tag as well. The reason 
> it wasn't working for me was that the sprintf statement was preceded 
> by "1+". I can't believe I missed this. Since the sprintf was being 
> interpreted first and then having 1 added to it, this was causing perl 
> to convert the string back to a number, thus wiping out the formatting 
> I had applied in sprintf. Ultimately I changed this line:
>   {  $1 eq 'SCORE'     ? (1+sprintf("%.3f",$spam_level))
> To this, so the addition would be done before the sprintf formatting:
>   {  $1 eq 'SCORE'     ? (sprintf("%07.3f",$spam_level+1))
> ...and now my subject line is being formatted as I wanted, with the 
> score zero padded.
> On 3/28/2017 11:24 PM, Jeff Morris wrote:
>> I posted about this last year but wasn't able to find a solution, so 
>> I'm revisiting it.
>> I have amavis configured to add the spam score to the subject line of 
>> spammy messages via the following variable in amavisd.conf:
>>   $sa_spam_subject_tag = '[SPAM: _SCORE_] ';
>> This gives me subject lines like the following examples:
>>   Subject: [SPAM: 21.21] Spammy Subject
>>   Subject: [SPAM: 7.13] Another Spammy Subject
>> I would like the scores to be zero-padded, so I can easily sort the 
>> spam in my email client (Thunderbird) by subject, so I can look for 
>> false-positives with lowish scores. For example, I would like the 
>> above examples to be changed to this:
>>   Subject: [SPAM: 007.13] Another Spammy Subject
>> Subject: [SPAM: 021.21] Spammy Subject
>> When I posted here last year someone suggested changing "_SCORE_" in 
>> my amavisd.conf to "_SCORE(000)_", however this does not work. It 
>> does not get parsed, instead it gives me the literal "_SCORE(000)_" 
>> in my subject lines, like this:
>>   Subject: [_SCORE(000)_] Spammy Subject
>>   Subject: [_SCORE(000)_] Another Spammy Subject
>> I've spent quite a bit of time trying to figure this out and have 
>> made no progress.
>> Could someone explain to me, in layman's terms, what amavisd does 
>> with the contents of the $sa_spam_subject_tag variable? Does it pass 
>> this to Spamassassin (in which case the problem I'm having would be 
>> with Spamassasin, rather than Amavis), or does Amavis parse this and 
>> replace it? I really don't understand the flow here through Amavis. 
>> I've done a fair amount of Perl scripting in my time, but I don't 
>> recognize the underscores as a Perl construct, and strings in 
>> single-quotes aren't parsed by Perl, so I really don't understand 
>> where the contents of this variable are getting parsed? I've been 
>> looking at /usr/sbin/amavisd, and it looks like _SCORE_ is some sort 
>> of amavisd macro. For example, on line 12304 I see this:
>>   SCORE  => sub {macro_score($MSGINFO,undef, at _)}
>> And on line 11849 I see the definition for the above macro_score 
>> function, which looks like is should parse "_SCORE(000)_", but as I 
>> said above, it doesn't when it's used in $sa_spam_subject_tag. I also 
>> see on line 16373 code to parse the contents of $subject_tag (not 
>> $sa_spam_subject_tag). This code does NOT appear to be capable of 
>> parsing the "_SCORE(000)_" syntax, so I tried changing the sprintf 
>> format on line 16377 from "%.3f" to "%07.3f", but this had no effect, 
>> so apparently $subject_tag and $sa_spam_subject_tag are not equivalent.
>> This is getting really frustrating, as it seems like such a simple 
>> change, but I've spent many hours trying different configuration 
>> options and digging through amavis' source code off and on over the 
>> past year trying to understand it, but still don't feel like I've 
>> made any progress. I'd really appreciate any help anyone could give.
>> I'm running CentOS 7.3.1611, amavisd-new-2.10.1-5, and 
>> spamassassin-3.4.0-2.
>> Thanks!

More information about the amavis-users mailing list