Envío de Correos con ActionMailer en Rails
Clase 31 de 36 • Curso de Introducción a Ruby on Rails
Resumen
¿Qué es el ActionMailer en Rails?
En el mundo de Ruby on Rails, el ActionMailer es un módulo esencial que te permite enviar correos electrónicos a los usuarios de manera automática. Esta herramienta es fundamental para notificar a los participantes cuando, por ejemplo, se ha creado una nueva tarea en nuestra aplicación. Antes de empezar a utilizar ActionMailer, es importante que repases los datos necesarios y tengas tu entorno de desarrollo listo para seguir adelante.
¿Cómo crear un Mailer en Rails?
Para comenzar a enviar correos electrónicos, primero debemos generar un Mailer. Utilizaremos el conocido generador de Rails, rails generate
, parametrizado con mailer
. Esto generará la estructura de directorios y archivos necesaria para la creación del email. En este caso, llamaremos al sistema de emails ParticipantMailer
. Al usar el comando, se crean varios directorios y archivos, entre ellos, el archivo principal ParticipantMailer
, donde desarrollaremos la lógica del envío del correo.
rails generate mailer ParticipantMailer
¿Cómo editar el archivo del Mailer?
Dentro del archivo ParticipantMailer
, podemos crear métodos como si fueran acciones de un controlador. Dichos métodos están asociados a vistas que renderizarán el email. Vamos a crear un método llamado new_tasks_email
que, mediante variables, transmitirá información a la vista.
class ParticipantMailer < ApplicationMailer
def new_tasks_email(user, task)
@user = user
@task = task
mail(to: @user.email, subject: 'Nueva tarea asignada')
end
end
¿Cómo invocar el Mailer desde el modelo de tarea?
Es fundamental llamar al Mailer una vez que una nueva tarea ha sido creada. Para lograr esto, utilizamos un callback after_create
en el modelo Task
. Este callback llamará al método de envío de correo electrónico que hemos definido.
class Task < ApplicationRecord
after_create :send_email
private
def send_email
participants = self.participants + [self.owner]
participants.each do |user|
ParticipantMailer.with(user: user, task: self).new_tasks_email.deliver_later
end
end
end
¿Cómo crear una vista para el email?
La vista del correo es la estructura HTML que se enviará a los usuarios. Utilizamos el archivo new_tasks_email.html.haml
para definir el contenido del correo.
%h1 Hola, #{@user.email}
%p Tienes una nueva tarea:
%ul
%li= "Nombre: #{@task.name}"
%li= "Descripción: #{@task.description}"
%li= "Categoría: #{@task.category.name}"
%li= "Ver tarea en el siguiente enlace: #{link_to 'Ver tarea', task_path(@task)}"
Previsualización de correos con Letter Opener
Para comprobar y previsualizar los correos sin necesidad de enviar mensajes reales, utilizamos la gema letter_opener
. Esta gema permite abrir los correos en el navegador, otorgando un entorno seguro para pruebas y ajustes.
Configuración de Letter Opener
-
Agrega
letter_opener
al grupo de desarrollo en tuGemfile
:group :development do gem 'letter_opener' end
-
Configura el entorno de desarrollo en
config/environments/development.rb
:Rails.application.configure do config.action_mailer.delivery_method = :letter_opener config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = true config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } end
Asegúrate de instalar la gema y reiniciar el servidor:
bundle install
rails server
Ahora, puedes crear una nueva tarea desde la interfaz de tu aplicación y verificar que los correos se generen correctamente en el navegador, gracias a letter_opener
. Esto no solo facilita la vista previa, sino también la detección de errores y pruebas de estilo en tus correos electrónicos.
¡Sigue adelante, profundiza en tus conocimientos de Rails y descubre todo lo que ActionMailer puede ofrecerte!