Envío de Correos en Rails con ActionMailer y Background Jobs
Clase 31 de 33 • Curso de Creación de APIs con Ruby on Rails
Contenido del curso
Proyecto
- 3

Creación de APIs con Rails: Proyecto Blog API paso a paso
04:37 min - 4

Configuración de Gemas para Pruebas en Proyectos Rails
06:26 min - 5

Configuración de Gemas en Proyectos Rails: Arspec, Factory Bot y Database Cleaner
07:25 min - 6

Implementación de un Health Check Endpoint en API con RSpec
12:28 min - 7

Diseño de Casos de Uso y Diagramas de Entidad para Aplicaciones
03:16 min - 8

Diagrama entidad relación: usuario y post
01:41 min - 9

Modelado de Aplicaciones con TDD en Rails
05:59 min - 10

Validaciones y Pruebas TDD en Rails: Modelos USR y Post
07:07 min - 11

Implementación de Endpoints para Listar y Mostrar Posts con TDD
15:12 min - 12

Implementar controlador Posts con TDD
10:34 min - 13

Pruebas TDD para crear y actualizar posts
10:12 min - 14

Implementación de Métodos y Manejo de Excepciones en Rails API
10:23 min - 15

Active Model serializers: control total de JSON en Rails
06:03 min - 16

Búsqueda y Filtrado de Posts por Título con TDD
05:57 min - 17

Implementación de Búsqueda de Posts con Servicios en Rails
06:06 min - 18

Problema N+1 en Rails: Detección y Solución Eficaz
04:40 min - 19

Identificación y solución del problema N+1 en Rails
06:20 min - 20

Flujo de Autenticación en APIs con Tokens y Proveedores
05:29 min - 21

Tests con RSpec para autenticación de tokens
12:17 min - 22

Autenticación con Tokens: Implementación en Rails API
05:53 min - 23

Autenticación de Usuarios en Controladores Rails
09:19 min - 24

Autenticación y Seguridad en CRUD de Posts en Rails
09:17 min - 25

Pruebas de Creación y Actualización con Autenticación en Rails
14:21 min - 26

Probando API Ruby on Rails con Postman
10:43 min - 27

Caching en Aplicaciones Web: Funciones y Niveles
07:15 min - 28

Aceleración de Búsquedas en Rails con Caching
08:23 min - 29

Background Jobs en Rails: Conceptos y Funcionalidades
05:45 min - 30

Procesamiento en Background y Envío de Correos con Rails
09:45 min - 31

Envío de Correos en Rails con ActionMailer y Background Jobs
Viendo ahora - 32
Autenticación y Autorización con JWT y Auth0 en Aplicaciones Web
03:48 min
Cierre
Configura y envía correos en Rails con Action Mailer, integrándolo con Active Job para tareas en background. Aprende a generar el mailer, definir el método con mail(to:, subject:), crear la vista .text.erb con variables de instancia y probar en desarrollo con letter_opener. Además, comprende cuándo usar deliver_now o deliver_later, y cómo ejecutar pruebas desde la Rails console.
¿Cómo generar un mailer con Rails y definir el correo?
Para enviar el reporte al usuario que lo solicitó, se usa el generador de Action Mailer. En aplicaciones con API (sin módulo de vistas), el generador no crea plantillas automáticamente.
- Ejecuta el generador del mailer.
- Define un método con los parámetros necesarios: usuario, post y reporte.
- Usa el DSL del mailer con mail para establecer destinatario y asunto.
rails g mailer post_report
# app/mailers/post_report_mailer.rb
class PostReportMailer < ApplicationMailer
def post_report(user, post, report)
@post = post
@report = report
mail(to: user.email, subject: "Post #{post.id}: reporte de post")
end
end
Puntos clave: - Generador variable según tipo de app: en Rails completo genera vistas; en API no. - Parámetros: se pasa el usuario para el email y el post/reporte para el contenido. - Asunto personalizable: incluye el ID del post para contexto claro.
¿Cómo crear la vista .text.erb y compartir datos?
El correo se renderiza con una plantilla cuyo nombre coincide con el método del mailer. En entorno API, debes crearla manualmente.
- Crea la carpeta del mailer en views.
- Nombra el archivo exactamente como el método del mailer con extensión .text.erb.
- Usa variables de instancia definidas en el mailer.
<!-- app/views/post_report_mailer/post_report.text.erb -->
Post id: <%= @post.id %>
Título: <%= @post.title %>
Buenas prácticas y errores comunes: - Coincidencia de nombres: método y archivo deben coincidir. - Extensión correcta: usar .text.erb, no .txt.erb. - Variables de instancia: define @post y @report en el mailer para usarlas en el template.
¿Cómo se invoca desde un background job?
Cuando ya estás dentro de un background job, no necesitas otra cola para el correo.
PostReportMailer.post_report(user, post, report).deliver_now
- deliver_now: envía inmediatamente; ideal si ya estás en un job.
- deliver_later: encola con Active Job automáticamente.
¿Cómo probar con letter_opener, la consola y Active Job?
En desarrollo, letter_opener permite ver el correo en el navegador sin servicios externos. Alternativamente, Rails imprime el correo en el log de desarrollo.
- Agrega la gema en el grupo de desarrollo e instala.
- Configura el delivery method de Action Mailer.
- Prueba desde la Rails console.
# Gemfile (grupo development)
gem 'letter_opener'
bundle install
# config/environments/development.rb
config.action_mailer.delivery_method = :letter_opener
Prueba del flujo en consola:
# Generar el reporte y enviarlo
y = User.first
p = Post.first
r = PostReport.generate(p)
PostReportMailer.post_report(y, p, r).deliver_now
Notas de depuración vistas en el proceso: - Errores por paréntesis o comas faltantes pueden romper la generación del reporte. - Si el template no se encuentra, verifica el nombre del archivo y la extensión .text.erb. - Sin letter_opener, el contenido del correo aparece en el log de desarrollo.
¿Cómo encolar y ejecutar con Active Job?
Comprueba que el job encola y el thread pool lo ejecuta.
# Encolar el trabajo en segundo plano con los IDs
PostReportJob.perform_later(User.first.id, Post.first.id)
- Mensaje de “enqueued” confirma que está en la cola.
- El thread pool de Rails toma el job y lo ejecuta tras un breve tiempo.
Acciones clave en el flujo: - Generar mailer y método con mail(to:, subject:). - Crear template .text.erb y pasar variables de instancia. - Elegir entre deliver_now y deliver_later según el contexto. - Probar con letter_opener y la Rails console. - Encolar con Active Job y validar la ejecución del job.
¿Te gustaría que revisemos casos de uso, manejo de errores o estructura del reporte para mejorar tu implementación? Cuéntame en los comentarios qué parte quieres profundizar.