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

Este artículo está escrito por Anthoy Eden, fundador y desarrollador, en DNSimple. DNSimple es la forma más sencilla de gestionar todos tus dominios en un solo lugar sin tener que hacer clic en 10 pantallas de ventas adicionales para completar una compra simple. Además de los servicios de registro, DNSimple ofrece una API REST para crear y gestionar dominios y registros. También facilitan la recepción de email en tu dominio y el reenvío a cualquier otra cuenta de email, como un alias de email que hayas configurado para gestionar emails de asistencia o facturación, o un proveedor de email externo como Gmail.

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».
Photo of Paulius Milisauskas
Paulius Milisauskas Vicepresidente de Operaciones de Cliente
¡Mantenme informado/a! Recibe excelentes recursos en tu bandeja de entrada cada semana.
Envíame la newsletter de Mailjet. Acepto expresamente recibir la newsletter y sé que puedo darme de baja fácilmente en cualquier momento.

¡Consulta mensualmente tu bandeja de entrada para recibir la newsletter de Mailjet!