Servidor de correo con Mailgun

Mailgun logoYo creo que el servidor de correo ha sido el coñazo mas grande que yo he tenido que configurar nunca. Para ser justos, hace ya mas de 10 años desde que desmonte el dominio donde lo tenia con Postfix y desde entonces vengo usando Gmail, y por aquel entonces no tenia tanta experiencia con servidores y Linux, pero lo recuerdo como una locura constante: emails no entregados, spam por un tubo, relays chungos, blacklists, whitelists, suputamadrelists... vamos un horror.

Por aquí y aquí hay un par de artículos (en ingles) bastante interesantes al respecto.

Pues ahora quería volver a configurar un servicio de correo electrónico para varios dominios, pero no tenia ninguna gana de instalar un MTA propio, así que busque algunas alternativas. Las premisas eran sencillas:

  • Que pueda configurar en mi dominio y enviar y recibir correo como pepito@midominio.com.
  • Que pueda gestionar varias cuentas de correo.
  • Que me permita recibir y enviar correos desde mi cuenta de Gmail, que es la que uso habitualmente.
  • Que sea gratuito o de muy bajo coste.
  • No voy a hacer un uso extensivo de el, pero quiero poder tener direcciones de email propias.

Con esta idea en mente encontré Mailgun. Ellos se definen como un servicio de correo electrónico para desarrolladores, y solo eso ya suena bastante bien, ¿no?

Es un servicio bastante completo que provee de una API Rest para poder realizar operaciones en la recepción y envío, y básicamente nos va a gestionar hasta 10.000 mensajes al mes por la cara.

Tienen cosas bastante interesantes, como un SDK para PHP en Github donde tenéis algunos ejemplos sobre como usar su API para gestionar el correo:

https://github.com/mailgun/mailgun-php

Que nos ofrece

Con Mailgun vamos a poder:

  • Enviar correo desde nuestro dominio con un servidor SMTP externo.
  • Redireccionar el correo entrante hacia otras cuentas de correo, por ejemplo, Gmail: admin@midominio.com -> cuentadecorreodetodalavida@gmail.com
  • Logs e informes
  • Gestionar hasta 10.000 correos al mes de forma gratuita

Solo hay un pero: con la cuenta gratuita solo podemos enviar/recibir correo de/a otras cuentas que han de ser validadas previamente. Tenemos que pasarnos a una cuenta de pago y dar nuestros datos bancarios, pero hasta 10.000 correos al mes, el servicio es gratuito, no nos cobrarán ni un duro. Recomiendo registrarse con una cuenta básica, configurarlo y probarlo con algunas direcciones controladas, y si os convence, actualizar a una cuenta de pago. Vamos, lo que hice yo.

La primera en la frente

Una vez registrados en Mailgun, tendremos que configurar nuestro dominio. Desde su panel de control, vamos a Domains > Add new domain para hacerlo. Nos pedirá el nombre de nuestro dominio, y la primera recomendación es que utilicemos un subdominio para el correo del tipo mail.midominio.com y que mas tarde lo podremos configurar al gusto. Bueno, pues eso no es del todo cierto, y es una putada, porque me pasé un buen rato intentando configurarlo y no hubo forma. Si utilizamos mail.midominio.com, nuestras direcciones de correo van a ser siempre algo como pepito@mail.midominio.com, en lugar de pepito@midominio.com, que es lo que la mayoría de personas (las normales, al menos) tiende a querer configurar.

Así que nada de mail.loquesea, y al turrón. Yo lo he configurado en el dominio raíz y hasta ahora no he tenido ningún conflicto con ninguna otra cosa, claro esta, no tengo ningún otro servidor de correo en ese dominio.

Si alguien lee esto y ha conseguido configurarlo correctamente con mail.midominio.com, que deje un comentario o algo, y le pago una cerveza.

Configuración de DNS

Para configurar el dominio, tendremos que hacer algunos cambios en nuestros DNS para poder enviar correos, configurando una serie de registros que servirán básicamente para validar que el dominio es efectivamente nuestro. Para hacer esto dependeremos de nuestro proveedor de DNS y será diferente en cada caso, así que no voy a meterme ahí. Mailgun tiene un servicio que permite comprobar al momento si nuestros cambios de DNS son correctos o no.

Una configuración típica de DNS podría ser algo así, usando midominio.com como ejemplo:

midominio.com A xxx.xxx.xxx.xxx Registro A básico del dominio
midominio.com   MX 10 mxa.mailgun.org Registro de correo MX principal
midominio.com MX 10 mxb.mailgun.org Registro de correo MX secundario
pic._domainkey.midominio.com TXT k=rsa; p=XXXX Registro TXT con info de Mailgun
midominio.com TXT v=spf1 include:mailgun.org ~all Registro TXT con info de Mailgun
email.midominio.com CNAME mailgun.org Registro para rastreo de los correos

Hay que tener en cuenta que los cambios de DNS tardan en propagarse, y dependiendo de los cambios que hagamos Mailgun puede tardar hasta 24 horas en comprobar el dominio.

Enviar correo: SMTP

En cuanto tengamos los DNS configurados y validados por Mailgun, ya podremos comenzar a enviar correos, pero ojo, tan solo a direcciones previamente autorizadas si tenemos la cuenta básica. Accediendo a la información de nuestro dominio en Domains, debajo de Domain information podremos ver la configuración del servidor SMTP, que siempre será el mismo: smtp.mailgun.org. Hay un enlace en Manage STMP credentials. desde donde podremos dar de alta buzones nuevos y gestionar las contraseñas. Por defecto, tendremos configurado un buzón postmaster@midominio.com, y una contraseña por defecto.

Ahora lo que podemos hacer para comenzar a enviar correo es añadir la cuenta en cualquier otro servicio de correo (ejem, Gmail):

Usuario postmaster@midominio.com
Contraseña La que hayamos configurado
Servidor SMTP smtp.mailgun.org
Puerto 587
Otros Activar opción de TLS

Recibir correos: Mailgun Routes

Para recibir correos solamente tendremos que definir una serie de rutas, ya que Mailgun va a recoger absolutamente todo el correo que llegue a nuestro dominio, y procesarlo según las rutas que configuremos. La opción mas básica es crear una ruta para recoger los mensajes de una cuenta y reenviarlos automáticamente a otra (ejem, Gmail otra vez?). Lo bueno es que podemos crear tantas rutas como necesitemos, por lo que podemos crear tantas cuentas de correo como queramos, y redirigir cada una de ellas.

Para ello vamos a la opción de Routes > Create route, usaremos los siguientes datos:

Expresion type  Match recipient El tipo de regla
Recipient nuevacuenta@midominio.com Cuenta de correo que queremos configurar
Actions cuentadestino@servidor.com Activar la opción Forward
Description Nuestra descripción Algo para identificar la regla

De este modo podemos ir creando las reglas que necesitemos para todos los buzones que queramos configurar. Como veis no es necesario configurar nada en nuestro cliente de correo, ya que no se usa un servidor POP3 o IMAP, sino que simplemente Mailgun se encargará de reenviar los correos a los recipientes adecuados.

Conclusiones

Cumple perfectamente lo que esperaba de el servicio, y a coste 0 patatero. Me ahorro el tedio de configurar mi propio MTA, y además tengo un plataforma que me va a permitir jugar con el correo si lo necesito. La configuración es muy sencilla y lleva poco tiempo, y el único problema que tuve fue el tema de poner el mail.* delante del dominio.

Hay par de cosas a comentar:

  • A veces los correos tardan un ratito en llegar, mas de lo usual con un servicio de correo 'normal', pero llegan.
  • Si configuráis esto con Gmail, el muy cabrón no os va a mostrar el mensaje recibido, al enviar el correo desde la misma cuenta que lo va a recibir. Tenéis que usar una cuenta diferente para enviar y recibir.

Aparte de este par de detalles, el servicio funciona bastante bien, y tiene mucha potencia si de verdad necesitamos realizar operaciones con estos correos, ya que podemos configurar una URL para recibirlos por medio de servicio web, por ejemplo. En mi caso, para lo que yo lo quería, me va perfecto.

Ya me contaréis si lo utilizáis o no.

 

Referencias