4.23. How do I use SpamAssassin with Mailman?
There are 3 ways.
1. Integrate it into the MTA, such as described in FAQ entry 6.12 at Mailman + postfix + amavisd-new HOWTO (anti-spam).
2. Add "GLOBAL_PIPELINE.insert(1, 'SpamAssassin')" to your mm_cfg.py file. See http://www.jamesh.id.au/articles/mailman-spamassassin/. [see note below]
3. Using procmail to execute spamassassin before handing the message to mailman. (see rest of FAQ entry).
From a post to the mailman-users list by Dave Stern <dave AT umiacs DOT umd DOT edu> on 26 Feb 2003. Edited to use default paths. Edited to use better procmail rules.
Note that as of Dec 19, 2008, James Henstridge's solution (method #2 above), is out of date when used with recent versions (>=2.1.10) of Mailman. The following Patch to Henstridge's SpamAssassin.py may be required.
--- SpamAssassin.py 2008-12-16 18:44:15.000000000 -0600 +++ SpamAssassin-fixed.py 2008-12-16 18:49:23.000000000 -0600 @@ -78,7 +78,8 @@ if MEMBER_BONUS != 0: for sender in msg.get_senders(): if mlist.isMember(sender) or \ - matches_p(sender, mlist.accept_these_nonmembers): + matches_p(sender, mlist.accept_these_nonmembers, + mlist.internal_name()): score -= MEMBER_BONUS break
And beginning with Mailman 2.1.21, the following patch is required instead of the above.
--- SpamAssassin.py 2004-06-13 00:25:58.000000000 -0700 +++ SpamAssassin-fixed.py 2017-02-20 21:20:19.173188900 -0800 @@ -28,7 +28,6 @@ from Mailman import Errors from Mailman.Logging.Syslog import syslog from Mailman.Handlers import Hold -from Mailman.Handlers.Moderate import matches_p SPAMD_HOST = getattr(mm_cfg, 'SPAMASSASSIN_HOST', '') DISCARD_SCORE = getattr(mm_cfg, 'SPAMASSASSIN_DISCARD_SCORE', 10) @@ -78,7 +77,10 @@ if MEMBER_BONUS != 0: for sender in msg.get_senders(): if mlist.isMember(sender) or \ - matches_p(sender, mlist.accept_these_nonmembers): + mlist.GetPattern(sender, + mlist.accept_these_nonmembers, + at_list='accept_these_nonmembers' + ): score -= MEMBER_BONUS break
Seeing how others have asked about this, I've gotten an older version of mailman (2.0.12) and spamassassin (2.1) working together. Let's say we have two lists, one called mylst, the other mylist2:
add to your aliases file
mylist: "/usr/bin/procmail -m /etc/procmailrc" mylist2: "/usr/bin/procmail -m /etc/procmailrc"
Note: procmail will need to be in your smrsh directory.
in file /etc/procmailrc include things like
:0f | /usr/bin/spamassassin :0: * ^X-Spam-Status: Yes /tmp/Likelyspam :0 * ^TO_mylist@domain.com |/etc/smrsh/wrapper post mylist :0 * ^TO_mylist2@domain.com |/etc/smrsh/wrapper post mylist2
The second method will work with any version of mailman given that the wrapper call is correct. For mailman 2.0 /etc/smrsh/wrapper
For mailman 2.1 /etc/smrsh/mailman
Under Debian, relplace /etc/smrsh with /var/lib/mailman/mail or possibly /etc/mail/smrsh depending on your sendmail config.
Q: What if one does not have command line access to mailman, can one still use spamassassin with mailman?
A: Yes but you would probably have to set up a pretty fancy forwarding scheme. Moderated messages getting forwarded to an administrator whose .procmailrc sent them to spamassassin...
Converted from the Mailman FAQ Wizard
This is one of many Frequently Asked Questions.