$ Last revision: 23/03/2004 $


Vamos a ver cómo instalar Mailman, un potente gestor de listas de correo, mayoritariamente usado en la actualidad frente a otras alternativas como majordomo, en un sistema Debian (en mi caso Sarge), e integrándolo con el MTA Postfix.


Lo primero será por supuesto tener instalado y correctamente funcionando Postfix. Esa tarea será objeto de otro tutorial disponible en breve. En mi caso Postfix tira de MySQL para autentificación de usuarios y para saber a qué buzones debe entregar el correo virtual.
El correo local utiliza el archivo de alias. Además, dado que solamente uso correo local para gestionar las listas de mailman (todos los demás usuarios son virtuales), he optado por diferenciar el correo de entrega local y el correo de los usuarios virtuales por medio de diferentes mailhost:
- kalendas.net para entregas virtuales
- lists.kalendas.net para entregas locales (únicamente mailman)
Cada cual puede optar por el esquema que quiera y se adapte a sus necesidades, pero éste me parece limpio y sencillo :)

Dicho ésto comenzamos:


1. Instalamos mailman. Al finalizar nos advertirá de que no puede arrancar el servicio hasta que hayamos creado la lista especial 'mailman'. La crearemos en su debido momento.


$ apt-get install mailman

2. Editamos /etc/mailman/mm_cfg.py y nos aseguramos de que sólo existan las siguientes líneas. Si hay otras (que no sean comentarios) las eliminamos pues causarán problemas.


# Lenguaje por defecto, es=español, en=inglés
DEFAULT_SERVER_LANGUAGE = 'es'
# URL para acceder al interfaz web de mailman
DEFAULT_URL = 'http://lists.dominio.com/mailman/'
# Estos 3 valores los dejamos con el hostname
DEFAULT_HOST_NAME = 'lists.dominio.com'
DEFAULT_EMAIL_HOST = 'lists.dominio.com'
DEFAULT_URL_HOST = 'lists.dominio.com'

USE_ENVELOPE_SENDER = 0
DEFAULT_SEND_REMINDERS = 0
MAILMAN_OWNER = 'mailman-owner@%s' % DEFAULT_HOST_NAME

# Rutas varias
IMAGE_LOGOS = '/images/'
DEFAULT_URL_PATTERN = 'http://%s/mailman/'

MTA = "Postfix"
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)

3. Editamos el archivo de configuración de Postfix /etc/postfix/main.cf y agregamos las siguientes líneas (puede que alguna de éstas líneas ya existan en tu configuración, cambia las opciones que sean necesarias):


owner_request_special = no
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
mailbox_command = /usr/bin/procmail -a "$EXTENSION"
mydestination = $myhostname, localhost.$mydomain, lists.dominio.com
relay_domains = lists.dominio.com

alias_maps = hash:/var/lib/mailman/data/aliases

En mydestination deberemos incluir el host que sirve las mailing list, para que Postfix sepa que todo lo que venga @lists.dominio.com va a ser correo tratado localmente (sin tirar de MySQL y virtual domains). Y en relay_domains es fundamental incluir también éste hostname, o de lo contrario Postfix denegará los envíos de los suscriptores alegando "Relay access denied".


4. Ahora si podemos crear la lista especial 'mailman'. Esta lista DEBE existir siempre en una instalación de mailman, aunque su nombre puede variar. Para no complicar las cosas la dejaremos con su nombre por defecto.
Más información sobre el cometido de ésta lista especial aquí.


$ newlist
Enter the name of the list: mailman
Enter the email of the person running the list: tu@email.com
Initial demandawanadoo password:
Hit enter to notify demandawanadoo owner...

$ /usr/lib/mailman/bin/genaliases

5. Con ésto habremos creado nuestra primera lista, que además es obligatoria. Tras crearla debemos reiniciar Postfix con /etc/init.d/postfix reload para que coja los cambios hechos anteriormente y encuentre el fichero de alias /var/lib/mailman/data/aliases que nos acaba de generar Mailman. Las subsiguientes listas se crearán siguiendo el mismo procedimiento, sin olvidarse nunca de ejecutar tras su creación el script /usr/lib/mailman/bin/genaliases que como su nombre indica, genera los alias necesarios para que Postfix "entienda" esa lista. No hace falta reiniciar Postfix al crear las siguientes listas.


6. Por último, tenemos que configurar nuestro Apache para que sirva correctamente la interfaz de administración de Mailman. Para ello será necesario agregar un nuevo virtual host conteniendo lo siguiente. Si a lo largo de este tutorial pusiste rutas diferentes, tendrás que modificar el virtual host acorde a ellas.


<VirtualHost *>
ServerName lists.dominio.com
DocumentRoot /var/www/lists.dominio.com

ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
<Directory /usr/lib/cgi-bin/mailman/>
  AllowOverride None
  Options ExecCGI
  Order allow,deny
  Allow from all
</Directory>

Alias /pipermail/ /var/lib/mailman/archives/public/
<Directory /var/lib/mailman/archives/public>
  Options Indexes MultiViews SymLinksIfOwnerMatch
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>
<Directory /var/lib/mailman/archives/private>
  Options Indexes MultiViews SymLinksIfOwnerMatch
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Alias /images/ /usr/share/images/mailman/
</VirtualHost>

7. Agrega un alias a tu BIND o djbdns, que apunte a lists.dominio.com (solo una entrada A o alias, no crees una entrada MX pues el correo lo va a seguir gestionando tu mail server principal). Por ejemplo en djbdns agrega a tu fichero data la siguiente línea: +lists.dominio.com:10.3.4.5:43200.

Arranca mailman: /etc/init.d/mailman start
Si ahora accedes a http://lists.dominio.com/mailman/listinfo te aparecerá el interfaz web de Mailman.
Si lo deseas puedes crear un index.html que redirija directamente a esa URL en /var/www/lists.dominio.com para que la gente que acceda desde el dominio raíz se encuentre algo.