Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Creando la vista del email
  • Invocando el mailer
  • Configurando el ambiente de desarrollo
  • Configurando el ambiente de producción
  • Utilizando URLs en las vistas de los emails
  1. Ruby on Rails I

Envío de correos

El componente que se encarga de los envíos de correos en Rails es Action Mailer.

El primer paso para poder enviar correos en Rails es crear un mailer.

Así como los controladores, los mailers involucran varios archivos, así que es mejor utilizar el generador que trae Rails.

Por ejemplo, para crear un mailer llamado UserMailer que agrupe los correos que les vamos a enviar a los usuarios se utiliza el siguiente comando que crea varios archivos:

$ rails generate mailer UserMailer
create  app/mailers/user_mailer.rb
invoke  erb
create    app/views/user_mailer
invoke  test_unit
create    test/mailers/user_mailer_test.rb
create    test/mailers/previews/user_mailer_preview.rb

El componente principal del mailer es la clase UserMailer que se se encuentra en el archivo app/mailers/user_mailer.rb:

class UserMailer < ApplicationMailer
end

Cada método de la clase se va a convertir en un correo. Por ejemplo, creemos un nuevo correo de bienvenida:

class UserMailer < ApplicationMailer
  def welcome_email(user)
    @user = user
    mail(to: @user.email, subject: 'Bienvenido a mi super sitio!')
  end
end

La primera línea del método welcome_email está creando una variable de instancia para la vista. La segunda línea renderiza y envía el correo.

Creando la vista del email

Así como con los controladores, las vistas de los emails deben ir en una ubicación definida y se deben llamar igual al método.

Por ejemplo, para el método welcome_email debemos crear un archivo llamado welcome_email.html.erb dentro de la carpeta app/views/user_mailer/:

<h1>Bienvenido a mi sitio <%= @user.name %></h1>

El layout por defecto se encuentra en app/views/layouts/mailer.html.erb.

Podemos crear también una versión de texto para los clientes de correo que aún no soportan HTML (aunque la realidad es que hoy en día la mayoría soporta HTML):

Bienvenido a mi sitio <%= @user.name %>
========================================

Cuando llamas el método mail desde welcome_controller Action Mailer va a detectar las dos vistas (HTML y texto) y las va a enviar para que cada cliente de correo decida cuál mostrar.

Invocando el mailer

Para enviar el email desde otra parte de la aplicación invocas el método sobre la clase directamente y lo envías con deliver_now o deliver_later. Por ejemplo:

UserMailer.welcome_email(user).deliver_later

Configurando el ambiente de desarrollo

En desarrollo no queremos que los emails lleguen realmente a su destino, simplemente saber que están funcionando.

  1. Agrega la gema al Gemfile:

     gem "letter_opener", group: :development
  2. Ejecuta bundle install.

  3. Configura el modo de envío en config/environments/development.rb (busca la línea y asegúrate que quede como la siguiente):

     config.action_mailer.delivery_method = :letter_opener

Eso es todo. La próxima vez que se envíe un email se abrirá una nueva pestaña del navegador con el email.

Configurando el ambiente de producción

Utilizando URLs en las vistas de los emails

Si vas a incluir vínculos a tu aplicación en los emails es importante que utilices los helpers que terminan en _url en vez de _path (es decir, root_url en vez de root_path) para que Action Mailer genere toda la URL al sitio.

Sin embargo, lo anterior presenta un problema y es decirle a Rails cuál es el dominio en donde va a estar alojada la aplicación.

Para eso hay varias alternativas pero quizá la más fácil sea configurar cada uno de los ambientes con el host correspondiente.

Por ejemplo, en config/environments/development.rb y config/environments/test.rb:

config.action_mailer.default_url_options = { host: "localhost:3000" }

En config/environments/production.rb:

config.action_mailer.default_url_options = { host: "midominio.com" }
PreviousSass y BootstrapNextCarga de imágenes

Last updated 2 years ago

La diferencia entre deliver_now y deliver_later es que este último envía el mensaje de forma asincrónica, pero para eso debes tener configurado .

La forma más fácil que hemos encontrado es con una gema llamada que permite visualizar los correos en el navegador.

Para configurar :

Lo más recomendado para producción es utilizar un servicio como , , o uno parecido.

Active Job
Letter Opener
Letter Opener
MailGun
Postmark
SendGrid