Installing the mailman package on Debian is easy… but at some point, you gotta run into exim4 configuration again! >:(

Fact is exim4 does not by default and strongly discourages using piping to programs in /etc/aliases… which unfortunately is the way mailman likes to get its incoming mail. Bleh! :|

After having tried a gazillion different things I finally managed to get it to work by adding the following into /etc/exima4/exim4.conf.template …

This is derived from http://www.exim.org/howto/mailman21.html .

Top of the file:

# Home dir for your Mailman installation -- aka Mailman's prefix # directory. # By default this is set to "/usr/local/mailman" # On a Red Hat/Fedora system using the RPM use "/var/mailman" # On Debian using the deb package use "/var/lib/mailman" # This is normally the same as ~mailman MM_HOME=/var/lib/mailman # # User and group for Mailman, should match your --with-mail-gid # switch to Mailman's configure script. # Value is normally "mailman" MM_UID=list MM_GID=list # # Domains that your lists are in - colon separated list # you may wish to add these into local_domains as well domainlist mm_domains=ns34611.ovh.net:b2evo.net:b2ee.com # # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # # These values are derived from the ones above and should not need # editing unless you have munged your mailman installation # # The path of the Mailman mail wrapper script MM_WRAP=MM_HOME/mail/mailman # # The path of the list config file (used as a required file when # verifying list addresses) MM_LISTCHK=MM_HOME/lists/${lc::$local_part}/config.pck

Make sure you check the user and group here, as an error there will result in a very hard to detect error (no explicit log message anywere). I used “list” because that group of the handler ( /var/lib/mailman/mail/mailman ).

In the router section (after the system_aliases sub-section):

mailman_router:
  driver = accept
  domains = +mm_domains
  require_files = MM_LISTCHK
  local_part_suffix_optional
  local_part_suffix = -admin : \
     -bounces   : -bounces+* : \
     -confirm   : -confirm+* : \
     -join      : -leave     : \
     -owner     : -request   : \
     -subscribe : -unsubscribe
  transport = mailman_transport

At the end of the transport section:

mailman_transport:
  driver = pipe
  command = MM_WRAP \
    '${if def:local_part_suffix \
      {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \
      {post}}' \
    $local_part
  current_directory = MM_HOME
  home_directory = MM_HOME
  user = MM_UID
  group = MM_GID

I hope this can save some time to someone, someday… ;)


Comments from long ago:

Comment from: alex

Thanks, saved me a lot of time!

2006-07-21 08-03