On Fri, 2010-03-05 at 11:19 -0600, Ron Johnson wrote: > On 2010-03-05 10:14, Karsten Bräckelmann wrote:
> > I'd suggest to do it right from the beginning. That is, exclusively use > > the constraint rcvd or auth whitelisting variants. Also, is there any > > valid reason you need this to be per-user? As opposed to maintain a > > clean whitelisting site-wide anyway. > > My wife and I don't need to white-list the same people. So what? Would you consider the same mail spam, that your wife wants to whitelist? Splitting this across users appears to be nothing but a maintenance overhead in such a case. > > Also, as I previously hinted -- a *need* for whitelisting often is > > caused by some mis-configuration or training. Whitelisting is very > > rarely necessary. Do you really need it? > > I have noticed lately (maybe after the 3.3.0 upgrade) that the > bayesian filter quite often thinks that ham is really 50% > probability spam, sometimes even 100% spam. SA then adds a big > section to the email saying why it thinks the message is spam. So your problem is a badly trained Bayes. Whitelisting is not going to fix your real issue. > Does sa-learn know to skip over such stuff? sa-learn exclusively is run manually, and will learn according to what you explicitly requested. Two things to keep in mind: (a) Given your site-wide setup, do not run sa-learn as the recipient user. But run it as your spamfilter user. (b) Be careful to either train on dedicated learning mail folders only, or after you expunged the folder. Without that expunge (compact in TB lingo) [1], "deleted" messages in fact are not physically removed. This results in training on messages that are believed by the user to be removed, but in fact are not. A dirty corpus. [1] Compact is an operation on the source folder. Emptying the Trash in TB will not do it. The Trash holds a *copy*. -- char *t="\10pse\0r\0dtu...@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; }}}