jueves, 24 de abril de 2014

Nullmailer y Mandrill como alternativa a un servidor de mail local

Nunca me ha gustado la idea de tener un servidor de mail local instalado en producción, por dos motivos principales:

El primero es que según el uso (o mal uso) que le des al mail desde tu aplicación, puede que los usuarios te marquen como spam y que la IP de tu servidor se añada a una lista negra. En ese caso, tus mails salientes quedarán bloqueados y no se enviarán, y conseguir que te borren de una lista negra no es tarea fácil.

El segundo es que hay que configurarlo, he escuchado muchas historias de miedo de lo doloroso que es administrar un servidor de correo y prefiero no pasar por eso.

Hace un tiempo, la opción habitual era utilizar un servicio externo para las newsletters, como MailChimp y el resto de mails enviarlos desde la aplicación.

El siguiente paso natural fue enviar tambien el mail transaccional de la aplicación (bienvenida, olvido de password, ...) desde una plataforma externa, usando su SMTP o su API. Un ejemplo sería Mandrill y las diferentes integraciones que tiene.

Pero en nuestro caso queríamos ir un paso más y directamente no tener un servidor local para envío de los mails de sistema (p.e. los cron). Y aquí es donde aparece Nullmailer.

Nullmailer es un MTA que usa el mismo formato que sendmail y permite redirigir el mail saliente a un servidor externo, de forma que desde tu servidor nunca se enviará el mail.

En Ubuntu Trusty está disponible como paquete. La versión en Ubuntu Precise no soporta SSL, pero hay un backport que si lo soporta.

La configuración es bastante simple, solo hay que cambiar 4 ficheros en el directorio /etc/nullmailer:

  • adminaddr con el email del administrador
  • me con el nombre del servidor
  • defaultdomain con el dominio de tu servidor
  • remotes con la configuración del servidor de correo

La configuración completa la podeis encontrar perfectamente explicada en este post de OpenSourceHacker , escrito por el mismo que hizo el backport de Nullmailer a Precise


Por último, destacar que Nullmailer no escucha en el puerto 25 como cualquier SMTP, así que si algún servicio depende de SMTP, se debe configurar por separado.

Un ejemplo de este último caso es monit, donde se debe configurar un servidor para enviar las alertas. Así que lo que haremos, será que apunte directamente al SMTP de mandrill

  server {
  set mailserver smtp.mandrillapp.com port 587
    username "youremail@domain.com" password "your_password"
    using tlsv1
  }