-
Notifications
You must be signed in to change notification settings - Fork 179
MailmanConfiguration
Nigel Metheringham edited this page Nov 25, 2012
·
1 revision
The following will allow exim to query Mailman for information whether a list exists in Mailman. It is thus not necessary to have dedicated aliases for a queue in the exim configuration. Exim will pick up the configuration automatically.
mailman:
driver = pipe
command = /usr/lib/mailman/mail/mailman \
'${if def:local_part_suffix \
{${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1} }} \
{post}}' \
$local_part
current_directory = /var/lib/mailman
debug_print = "T: mailman for $local_part@$domain."
group = list
home_directory = /var/lib/mailman
user = list
mailman:
driver = accept
debug_print = "D: mailman for $local_part@$domain"
domains = CONFDIR/mailman_domains
local_part_suffix = -bounces : -bounces+* : \
-confirm+* : -join : -leave : \
-owner : -request : -admin
local_part_suffix_optional
require_files = /var/lib/mailman/lists/$local_part/config.pck
retry_use_local_part
transport = mailman
bounce_mailman:
driver = redirect
allow_defer
allow_fail
data = :fail: Unknown user
debug_print = "D: bounce_mailman for $local_part@$domain"
domains = CONFDIR/mailman_domains
retry_use_local_part
# this director bounces all mail from a mailman domain that hasn't been
# picked up by the mailman director
The configuration above will not work for lists ending with -admin, -owner, etc.. Here is an alternative solution (embedded perl is required):
perl_startup = do '/etc/exim4/mailman.pl'
MM_UID = list
MM_GID = list
domainlist mm_domains = whatever1 : wahetever2
mailman_router:
driver = redirect
domains = +mm_domains
data = ${perl{getmmalias}{$local_part}}
user = MM_UID
group = MM_GID
pipe_transport = address_pipe
$MM_HOME='/var/lib/mailman';
sub getmmalias {
opendir(IMD, "$MM_HOME/lists");
foreach $f (readdir(IMD)) {
unless ( ($f eq ".") || ($f eq "..") ) {
if ( $f eq $_[0] ) {
closedir(IMD);
return "|$MM_HOME/mail/mailman post $f\n";
}
foreach $postf ("admin","bounces", "confirm", "join", "leave","owner", "request", "subscribe", "unsubscribe") {
if ( "$f-$postf" eq $_[0] ) {
closedir(IMD);
return "|$MM_HOME/mail/mailman $postf $f\n";
}
}
}
}
closedir(IMD);
return;
}
Another way of dealing with lists with -admin in the name is to have a router to catch the list before the mailman router. e.g.: use the transport from the 1st example and then
mailman_pre:
driver = accept
debug_print = "D: mailman for $local_part@$domain"
domains = CONFDIR/mailman_domains
require_files = /var/lib/mailman/lists/$local_part/config.pck
retry_use_local_part
transport = mailman
mailman:
driver = accept
debug_print = "D: mailman for $local_part@$domain"
domains = CONFDIR/mailman_domains
local_part_suffix = -bounces : -bounces+* : \
-confirm+* : -join : -leave : \
-owner : -request : -admin
require_files = /var/lib/mailman/lists/$local_part/config.pck
retry_use_local_part
transport = mailman
bounce_mailman:
driver = redirect
allow_defer
allow_fail
data = :fail: Unknown user
debug_print = "D: bounce_mailman for $local_part@$domain"
domains = CONFDIR/mailman_domains
retry_use_local_part
# this director bounces all mail from a mailman domain that hasn't been
# picked up by the mailman director
The mailman_pre route will catch the listnames including *-admin lists, while the mailman router will deal with all the administrative requests.