On Thu, 2013-09-26 at 14:11 +0100, Philip Colmer wrote: > I've just installed SA 3.3.2 on an Ubuntu server to be used with > Mailman, using apt-get install spamassassin. > > I've mostly followed the instructions in > http://www.jamesh.id.au/articles/mailman-spamassassin/ [...]
> However, the emails are NOT getting spam headers inserted, whether > they are ham or spam. That's due to the Mailman filter in above reference. The Mailman filter uses the SYMBOLS spamd method, rather than PROCESS, which makes spamd return the status, score and a list of rules hit only. Unlike with PROCESS, the message itself is not returned, thus no X-Spam headers either. A closer look at the python code suggests, the filter even hardly cares about the rules hit -- it just cares about the score to decide whether to pass, moderate or discard the message. That decision is passed back to the Mailman filter chain. > What am I misunderstanding or what have I overlooked? Generally, the client (a mailman filter in your case) passes the message to spamd, which after processing returns the modified message. As you pointed out correctly, this modification by default adds some X-Spam headers, at the very least an X-Spam-Version header. The docs you cited apply to SpamAssassin. The method the Mailman filter uses is spamd specific, though, a daemon implementation using SA at its core. There's also a general misunderstanding here. While the client passes the message (a copy of the message, rather), it is up to the client what it does with the returned data -- including outright ignoring the result with the X-Spam headers added, and proceeding with (a copy of) the original message. In order to have the added X-Spam headers show up later, the client has to discard the original copy, and pass along the modified version as received from the daemon. If you want the X-Spam headers, you will need a different Mailman filter / documentation to follow. -- 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; }}}