Reformatting spam score in subject?
Jeff Morris
jeffm859 at nullmodem.org
Wed Mar 29 11:32:33 CEST 2017
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