On Tue, 2014-07-01 at 18:43 -0500, Steve Bergman wrote: > On 07/01/2014 06:09 PM, RW wrote: > > I'm sceptical about the use of Dovecot-Antispam with Spamassassin. > > The problem is that it trains on SpamAssassin errors rather than Bayes > > errors. It may be possible to get sufficient spam this way, but ham > > is learned very slowly through avoidable FPs. > > We currently (early days for this installation) get plenty of spam for > the users to train by moving it to the junk folder. Ham was the problem. > Dovecot does nothing about training ham.
Dovecot (and its antispam plugin) does nothing about training ham, either. It offers target folders and triggers, for easy manual (re-) classification -- and thus training -- of ham and spam. > That's why I have a line in the users' default .forward file to train > incoming mail as ham. That's pretty bad practice. Fundamentally, you are implementing a custom auto-learn flavor, overruling the SA configurable auto-learn behavior and ignoring all safety concepts implemented by SA. There's a reason for the ham and spam learning thresholds, and the ham threshold to be 0.1 by default, *not* equaling required_score's default of 5.0. > Then if they or Thunderbird decide to move the mail to Junk, it gets > re-trained as spam. So if a user in a hurry simply deletes some spam, it will remain ham, as far as Bayes is concerned. > dovecot-antispam is *not* a complete solution, so far as I can see. > > At this early stage, it *is* painful to watch all that spam coming in > over the weekend getting trained as ham. I tell my users to mark it as > spam on Monday morning. And if they don't, I just figure it's not my fault. It is your fault to implement a broken training strategy. > Once the token databases get larger there won't be so much potential > flux back and forth, I guess. -- char *t="\10pse\0r\0dtu\0.@ghno\x4e\xc8\x79\xf4\xab\x51\x8a\x10\xf4\xf4\xc4"; main(){ char h,m=h=*t++,*x=t+2*h,c,i,l=*x,s=0; for (i=0;i<l;i++){ i%8? c<<=1: (c=*++x); c&128 && (s+=h); if (!(h>>=1)||!t[s+h]){ putchar(t[s]);h=m;s=0; }}}