Como enviar correos desde Rails API

Luego de terminar la implementación de mi API en Rails, creado con la nueva opción de Rails 5 --api la cual nos ayuda a generar aplicaciones sin un montón de gemas y configuraciones innecesarias cuando creemos crear un API, me di cuenta que necesitaba realizar envíos de correo electrónico para recuperación de contraseñas así es que aquí va una pequeña guía.

Para empezar, dentro de nuestro proyecto debemos crear un mailer el cual estará encargado de realizar el envío de correos, así es que para esto ejecutamos el siguiente comando en consola:

rails g mailer example_mailer

create  app/mailers/example_mailer.rb  
      invoke  erb
      create    app/views/example_mailer
   identical    app/views/layouts/mailer.text.erb
   identical    app/views/layouts/mailer.html.erb
      invoke  test_unit
      create    test/mailers/example_mailer_test.rb
      create    test/mailers/previews/example_mailer_preview.rb

Rails genera una serie de archivos que vamos a utilizar a medida que avancemos en esta guía.

El primer archivos que vamos a modificar es app/mailers/application_mailer.rb

class ApplicationMailer < ActionMailer::Base  
  default from: '[email protected]'
  layout 'mailer'
end  

acá definiremos el correo que usaremos por defecto como sender, así es que cambiamos el correo [email protected] por el que deseemos usar.

En el archivo app/mailers/example_mailer.rb definiremos la función que se encargará de realizar el envío de correo. Para nuestro caso enviaremos un correo muy sencillo de ejemplo

def sample_email(user)  
    @user = user
    mail(to: @user.mail, subject: 'Hola Mundo')
end  

Cuando definimos una función para enviar correos debemos crear un template el cual sera usado como el body de nuestro correo, así es que debemos crear un nuevo archivo con el nombre de nuestra función sample_email dentro del directorio app/views/example_mailer quedando de la siguiente forma app/views/example_mailer/sample_email.html.erb

<ht>Hola <%= @user.name %></ht>  
<p>  
    Te enviamos este correo desde nuestro Rails API ^_^
</p>  

Ahora configuraremos nuestro Mailer, en este caso usaremos el servidor smtp de gmail que enviará nuestros correos. Esto lo haremos en el archivo app/config/enviroments/development.rb, para este ejemplo usaremos una cuenta de gmail (esta configuración funcionaria de la misma forma para el ambiente de producción app/config/enviroments/production.rb y es recomendable usar las variables de entorno para este caso).
Agregamos la siguiente configuración al final de este archivo:

  # Mailer configuration
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :user_name            => "[email protected]",
    :password             => "tupassword",
    :authentication       => "plain",
    :enable_starttls_auto => true
  }

Listo ya hemos terminado nuestro mailer, ahora podemos simplemente usarlo desde cualquier parte que lo necesitemos usando la función que definimos ExampleMailer.sample_email(@user).deliver

Recuerda invocar la función deliver que es la encargada de disparar el evento de envío de correo

Puedes descargar el proyecto desde GitHub Api-Mailer

Jose Aponte

Desarrollador full-stack apasionado por las tecnologías de información y los lenguajes de programación. Me gustan divertirme con mi familia, mi lema es "Nunca paras de Aprender"

Bogota

Subscribe to Jappsku Engineering Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!