Estudios De Caso
Cómo DNSimple, basado en Ruby, utiliza la API de Mailgun para crear y configurar dominios para el reenvío de email
En DNSimple amamos el DNS de una manera casi enfermiza. Sin embargo, lo que no nos gusta es gestionar servidores de email. A principios de este año, decidimos añadir el reenvío de email como uno de los servicios que ofrecemos a nuestros clientes y, dado nuestro rechazo a la gestión de servidores de email, buscamos un proveedor con una buena API que pudiéramos integrar fácilmente. Gracias a las recomendaciones en Twitter, acabamos encontrando y eligiendo a Mailgun y hemos estado encantados con lo fácil que ha sido para nosotros integrarlo y mantenerlo.
Creación y configuración de dominios programáticamente
Nuestra aplicación web está desarrollada en Ruby on Rails, por lo que integrar Mailgun fue muy fácil.
Usamos HTTParty, una pequeña y excelente gema de Ruby de John Nunemaker, para comunicarnos con la API de Mailgun. Primero, configuramos una clase que es nuestro cliente:
require 'httparty'
class Mailgun
class MailgunError < StandardError
end
include HTTParty
base_uri 'https://api.mailgun.net/v2'
basic_auth 'api', C_.mailgun_api_key
end
Una vez que tenemos esta clase, podemos llamar a la API para iniciar nuestro proceso de creación y configuración programática de nuevos dominios personalizados para que nuestros clientes los utilicen para reenviar emails.
mailgun_domain_res = Mailgun.get("/domains/#{domain.unicode_name}")
if mailgun_domain_res.code != 200
mailgun_domain_res = Mailgun.post('/domains', :body => {:name => domain.unicode_name, :smtp_password => smtp_password})
# if created then increment the count
if mailgun_domain_res.code == 200
increment_email_forwarding(domain)
else
raise "Failed to create domain in Mailgun"
end
end
En este caso, primero comprobamos si existe un dominio en Mailgun. Si ya existe, podemos pasar al siguiente paso. Si no existe, lo creamos invocando una solicitud POST al recurso /domains. Pasamos el nombre y una contraseña SMTP. Si el dominio se creó correctamente, incrementamos el recuento de reenvío de email para el cliente, ya que facturamos por dominio. Si es la primera vez que creamos el dominio, también añadimos registros MX para realizar envíos automáticos para nuestros clientes, así como el registro SPF adecuado, lo que aumenta la entregabilidad.
Configuración de reenvío de email basada en coincidencias de expresiones regulares
A continuación, configuramos el reenvío de email que el cliente solicitó (p. ej., reenviar los emails de info@mycompany.com a paul@mycompany.com). En Mailgun, esta función se denomina «ruta» porque describe cómo enrutar un mensaje. En nuestro caso, queremos enrutar en base a una expresión regular proporcionada por el cliente y reenviar el dominio a la dirección de email de destino que elijan:
mailgun_route_res = Mailgun.post("/routes", body: {
description: "Email forwarding",
expression: %Q(match_recipient('#{email_forward_attributes[:from]}')),
action: %Q(forward('#{email_forward_attributes[:to]}'))
})
mailgun_route = Hashie::Mash.new(mailgun_route_res.parsed_response)
if mailgun_route_res.code != 200
raise Mailgun::MailgunError, mailgun_route.message
end
Si no se puede configurar la ruta, generamos un error; de lo contrario, devolvemos la ruta de Mailgun. Una vez que tenemos una ruta, almacenamos el route_identifier en nuestra base de datos, ¡y listo!
Si un cliente decide eliminar rutas, simplemente podemos borrarlas a través de la API:
mailgun_route_res = Mailgun.delete("/routes/#{email_forward.route_identifier}")
Y si ya no tienen más rutas, también eliminamos el dominio del sistema de Mailgun:
mailgun_domain_res = Mailgun.delete("/domains/#{domain.unicode_name}")
decrement_email_forwarding(domain)
Conclusión
En comparación con el dolor y la frustración de tener que operar y mantener un creciente sistema de almacenamiento y entrega de email, Mailgun proporciona una manera extremadamente simple de configurar el email para nuestros clientes, y los amamos por eso.
«Podemos garantizar un mejor servicio para nuestros profesionales del marketing al usar Mailgun. Ellos cuentan con nosotros y nosotros contamos con Mailgun: y esta relación nos ayuda a mantener la credibilidad ante nuestros clientes».