On Sat, Jun 07, 2008 at 01:33:39PM +0200, Olav Vitters wrote: > Note: I plan to integrate the discarded / accepted messages with > Spamassassin (bayes stuff). This has been done. See the attachments for the cron script + mailman patch. The ~/.procmailrc is trivial, not attaching that. -- Regards, Olav
diff -ru q/mailman-2.1.10/Mailman/Cgi/admindb.py mailman-2.1.10/Mailman/Cgi/admindb.py --- q/mailman-2.1.10/Mailman/Cgi/admindb.py 2008-04-21 20:28:22.000000000 +0200 +++ mailman-2.1.10/Mailman/Cgi/admindb.py 2008-06-07 22:32:45.000000000 +0200 @@ -197,6 +197,11 @@ ' ' + _('Discard all messages marked <em>Defer</em>') )) + form.AddItem(Center( + CheckBox('trainbayesp', 0).Format() + + ' ' + + _('Use messages marked as <em>Discard</em> and <em>Accept</em> to train the Bayesian classifier') + )) # Add a link back to the overview, if we're not viewing the overview! adminurl = mlist.GetScriptURL('admin', absolute=1) d = {'listname' : mlist.real_name, @@ -245,6 +250,11 @@ ' ' + _('Discard all messages marked <em>Defer</em>') )) + form.AddItem(Center( + CheckBox('trainbayesp', 0).Format() + + ' ' + + _('Use messages marked as <em>Defer</em> and <em>Accept</em> to train the Bayesian classifier') + )) form.AddItem(Center(SubmitButton('submit', _('Submit All Data')))) doc.AddItem(mlist.GetMailmanFooter()) print doc.Format() @@ -695,6 +705,10 @@ discardalldefersp = cgidata.getvalue('discardalldefersp', 0) except ValueError: discardalldefersp = 0 + try: + trainbayesp = cgidata.getvalue('trainbayesp', 0) + except ValueError: + trainbayesp = 0 for sender in senderactions.keys(): actions = senderactions[sender] # Handle what to do about all this sender's held messages @@ -709,6 +723,13 @@ preserve = actions.get('senderpreserve', 0) forward = actions.get('senderforward', 0) forwardaddr = actions.get('senderforwardto', '') + if trainbayesp and not forward: + if action == mm_cfg.DISCARD: + forward = 1 + forwardaddr = 'XXX gnome.org' + elif action == mm_cfg.APPROVE: + forward = 1 + forwardaddr = 'XXX gnome.org' comment = _('No reason given') bysender = helds_by_sender(mlist) for id in bysender.get(sender, []):
Attachment:
bayes.png
Description: PNG image
#!/bin/sh # # Mailman has been patched to forward messages marked as Dischard + Accept to # the amavis user. # # It uses plussed addresses for that. # # There is a procmail rule which sends the body of that email to two mailboxes. # The Mailman email has content type message/rfc822. Meaning: the original # message is preserved by only sending the body to the mbox. # # This scripts runs in cron and uses the mbox to train the bayes classifier. # cd $HOME type="spam" if [ -e bayes-$type/new ]; then rm -rf bayes-$type/train mv -f bayes-$type/new bayes-$type/train sa-learn --$type bayes-$type/train fi type="ham" if [ -e bayes-$type/new ]; then rm -rf bayes-$type/train mv -f bayes-$type/new bayes-$type/train sa-learn --$type bayes-$type/train fi