Usando Mandrill desde Rails

Introducción a Mandrill

--

En una aplicación Rails, normalmente usaríamos Amazon SES para enviar los mails transaccionales. Amazon funciona bien y es económico, pero muchas veces el cliente quisiera ver reportes de los envíos o quisiera poder editar un poco el template del correo que envía su aplicación. El objetivo de este post es explicar cómo enviar los mails de una aplicación Rails a través del servicio que ofrece mandrill.com.

Api Keys

Puedes crear api keys con algunas opciones. Algo muy util es la opción de “test” para un api-key, que usa una dimensión paralela para probar todo sin mandar mails de verdad. Perfecto para desarrollo.

Habilitar dominios

Puedes autorizar múltiples dominios. Fácilmente se siguen las instrucciones para además configurar correctamente el DKIM y SPF.

Se puede usar el API HTTP de Mandrill o las credenciales SMTP para enviar los mails. Nosotros preferimos el uso del API HTTP.

Templates

Puedes crear tantos templates como la aplicación requiera. En cada template debes preocuparte de dejar publicada una versión que tenga al menos:

  • Un contenido básico
  • From Address
  • From Name
  • Subject

Si no defines esos valores, el mail no se mandará ( y ojo, que el error es un poco invisible).

Templates Dinámicos

En Mandrill puedes usar dos tipos de lenguajes para templates. Handlebars y el que se usa en Mailchimp. El primero es más poderoso (condicionales, loops, etc…), pero tuvimos problemas cuando lo usamos con Mailchimp para exportar los templates a Mandrill.

Con Handlebars los templates se ven así:

Exportando los templates de Mailchimp

Es súper básica la edición de los templates dentro de Mandrill. Es por eso que se pueden exportar los templates desde Mailchimp. Con esta guía queda muy claro como hacerlo.

Ojo, que no logramos usar handlebars desde acá!

Api Logs

Existe una sección para ver todas las llamadas al API, con error y con éxito.

Integración con Rails via SMTP

Mandrill se puede utilizar como un servidor SMTP común y corriente, configurando action_mailer como en el siguiente ejemplo

Con eso estamos listos para usar los Mailers existentes de Rails y enviarlos con Mandrill.

Pero como queremos utilizar MailChimp para gerenciar los templates de cada tipo de email, no enviaremos emails por SMTP, sino usando la API HTTP de Mandrill

Integración con Rails usando API Http

Setup inicial

  • Agregar la gema mandrill-api en el Gemfile
  • Setear las variables en .rbenv-vars

    MANDRILL_APIKEY=XXX

Creando el MandrillMailer

Este módulo será la base para mandar emails usando los templates de Mandrill desde otros Mailers.

Utilizando un Mailer normal

Podemos utilizar un nuevo Mailer o crear uno y debemos incluir el módulo en el mailer como en este ejemplo:

Se puede ver que no estamos utilizando el clásico método mail de ActionMailer sino send_mail. Este método recibe 3 parametros.

  1. to: Puede ser una dirección de mail(string) o un arreglo de direcciones
  2. template: El nombre del template(slug) a utilizar en el envío
  3. template_vars: Este es un diccionario(Hash) con las variables necesarias en el template. En el ejemplo. cats es un arreglo con hashes y shop_name es solo un string

Utilizando en Devise Mailer

Para utilizar Mandrill con Devise, necesitamos crear un Mailer que herede de Devise::Mailer y configurarlo en Devise

Tenemos que reimplementar cada tipo de mail que queramos utilizar con Mandrill, en el ejemplo la recuperación de password y confirmación de cuenta.
Si es que estuviera habilitado otro tipo de mail de devise, no pasaría por Mandrill (Como ser send_unlock_instructions) y se enviaría por SMTP directamente.

--

--