Mailman is a list manager with web front end and built in archiving functions. Details can be found at http://www.list.org/
There is no Mailman configuration needed other than the standard options detailed in the Mailman install documentation. The exim configuration is transparent to Mailman. The uid/gid settings for Mailman must match those in the config fragments given below.
The exim configuration is built so that a list created within Mailman automagically appears to exim without the need for additional alias files etc to be changed.
The drawback of this configuration is that it will work poorly on systems supporting lists in several different mail domains - for that matter Mailman itself has poor support for this right now. This may change in the future
The configuration file segments included are to be built on top of an already functional exim configuration, which accepts mail for the domain which the list resides in (ie that domain is already in local_domains - should this domain be separate from the others handled by this exim, then add the list domain to local_domains, add a domains=my.list.domain option to each of the directors and you may wish to exclude that domain from the other directors.
Your exim configuration also needs a working alias configuration, with entries (within the list domain) for mailman, mailman-request and mailman-admin (plus any other global contact addresses for the list master). These addresses point to a (or some - not necessarily the same for all of these aliases) human rather than being piped into Mailman. You do not need to put per-list entries into the system alias file, and doing so will most likely break things since the user id used for delivery is likely to be incorrect or not set (which causes an exim delivery time config error).
There are 3 config file sections below which need pasting into the appropriate parts of the main exim config file. The first one may also need tailoring to your Mailman configuration
## Top section of config file - macro definitions ## Tailor these to fit your installation ## pretty much everything else should just fit... ## # home dir for Mailman MAILMAN_HOME=/home/mailman # wrapper script for mailman MAILMAN_WRAP=MAILMAN_HOME/mail/wrapper # user and group for Mailman MAILMAN_UID=exim MAILMAN_GID=exim
## Transports section ## ## Three transports for list mail, request mail and admin mail ## respectively ## Mailman is installed in MAILMAN_HOME ## Mailman is configured to be invoked as user exim list_transport: driver = pipe command = MAILMAN_WRAP post ${lc:$local_part} current_directory = MAILMAN_HOME home_directory = MAILMAN_HOME user = MAILMAN_UID group = MAILMAN_GID list_request_transport: driver = pipe command = MAILMAN_WRAP mailcmd ${lc:$local_part} current_directory = MAILMAN_HOME home_directory = MAILMAN_HOME user = MAILMAN_UID group = MAILMAN_GID list_admin_transport: driver = pipe command = MAILMAN_WRAP mailowner ${lc:$local_part} current_directory = MAILMAN_HOME home_directory = MAILMAN_HOME user = MAILMAN_UID group = MAILMAN_GID ### end of transports section fragment
## Directors section [this deals with local addresses] ## ## First 2 directors rewrite list-owner or owner-list to list-admin ## This is only done if the list exists. ## List existence checks are done by seeing if the file ## MAILMAN_HOME/lists//config.db ## exists. list_owner_director: driver = smartuser require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db suffix = "-owner" new_address = "${lc:$local_part}-admin@${domain}" owner_list_director: driver = smartuser require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db prefix = "owner-" new_address = "${lc:$local_part}-admin@${domain}" ## ## Next 3 directors direct admin, request and list mail to the appropriate ## transport. List existence is checked as above. list_admin_director: driver = smartuser suffix = -admin require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db transport = list_admin_transport list_request_director: driver = smartuser suffix = -request require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db transport = list_request_transport list_director: driver = smartuser require_files = MAILMAN_HOME/lists/${lc:$local_part}/config.db transport = list_transport ## End of directors fragment ## End of config files bits
Exim should be configured to allow reasonable volume - ie no setting max_recipients down to a silly value, and with normal degrees of security - ie allowing relaying from 127.0.0.1 (thats vital), but pretty much nothing else. Parallel deliveries and other tweaks can also be used. Delay warning messages should be switched off or configured to only happen for non-list mail - unless you like receiving tons of mail when a host is down.
One solution passed to me for handling virtual domains was - Since I use Mailman in a virtual domain configuration with a separate installation for each virtual domain, I did a slight modification like this:
## transport configurations command = "/virtual/${domain}/mailman/mail/wrapper post ${lc:$local_part}" current_directory = /virtual/${domain}/mailman home_directory = /virtual/${domain}/mailman ## and in the director part: require_files = /virtual/${domain}/mailman/lists/${lc:$local_part}/config.db
This is a set of configuration directives I used on the list boxes I admin. Some of these are necessary, others are cosmetic, a few are probably superfluous - they work for me!
# definition of injecting IP addresses LOCAL_NETS=127.0.0.1/32 # # Extra logging data - not necessary but makes the logs more # useful, but bigger # lookup all hostnames - puts hostnames into log as well as ips host_lookup = 0.0.0.0/0 # tweak logging log_all_parents log_file_path = /var/log/exim/%s.log log_received_recipients log_refused_recipients log_received_sender log_smtp_confirmation # # RBL settings - these are more severe than I use rbl_domains = rbl.maps.vix.com/reject:relays.mail-abuse.org/reject:dul.maps.vix.com/reject:relays.orbs.org=127.0.0.2,127.0.0.3/reject rbl_hosts = !LOCAL_NETS:0.0.0.0/0 rbl_log_rcpt_count recipients_reject_except=postmaster@*:*-admin@* # # relay control - from our local network only host_accept_relay = LOCAL_NETS # # delay warnings - second line is now default, but earlier versions of # exim need it setting delay_warning = 26h ##delay_warning_condition = "${if match{$h_precedence:}{(?i)bulk|list|junk}{no}{yes}}" # # Verify receipient addresses on everything except local injects # DO NOT verify addresses from Mailman - this would slow down # the acceptance of messages dramatically receiver_verify_hosts = !127.0.0.1/8:0.0.0.0/0 sender_verify # # performance tweaks - 1st is good for linux, maybe less so for others split_spool_directory remote_max_parallel = 15
This is how a set of address tests for the exim lists look on a working system. (command lines start with ">")
> /usr/sbin/exim -v -bt exim-users exim-users@www.exim.org deliver to exim-users in domain www.exim.org director = list_director, transport = list_transport > /usr/sbin/exim -bt exim-users-request exim-users-request@www.exim.org deliver to exim-users in domain www.exim.org director = list_request_director, transport = list_request_transport > /usr/sbin/exim -bt exim-users-admin exim-users-admin@www.exim.org deliver to exim-users in domain www.exim.org director = list_admin_director, transport = list_admin_transport
Nigel Metheringham$Id: mailman.html,v 1.3 2002/06/14 10:42:18 nigel Exp $