¿Cómo usar Action Mailer en nuestro proyecto Rails 5?

¿Cómo usar Action Mailer en nuestro proyecto Rails 5?

Luego de un turno de noche, en el marco de “El Día del Proceso Combatiente”, cuya consigna fue “Cancelación o Muerte… Venceremos!” la verdad es que aún tengo ganas de dormir una eternidad… Pero bueno, vamos a lo que nos convoca…

En Rails, el envío de correo es simple gracias a Action Mailer, es así como rápidamente podemos implementar un sistema de confirmación de acciones específicas para nuestro sistema, vía correo electrónico.

Para comenzar, crearemos nuestro proyecto en Rails, desde el cual enviaremos nuestros avisos por email. La idea es que cuando un nuevo usuario sea creado en el sistema, se envíe un email. Recordemos cómo crear nuestro proyecto…

$ rails new new_app_name
$ rails g scaffold user name:string email:string
$ rails db:migrate

Ahora que tenemos un proyecto básico en Rails, vamos a revisar el uso de Action Mailer. Usar Action Mailer es muy similar a cualquier otro generador en Rails.

$ rails g mailer example_mailer

Cómo dijimos al inicio, nuestro proyecto corresponde a Rails 5, particularmente a la versión 5.1.5, Veamos el archivo app/mailers/example_mailer.rb:

class ExampleMailer < ActionMailer::Base
 default from: "from@example.com"
end

Ahora, creamos los métodos y personalizamos el email para su envío. Lo primero es cambiar el correo del remitente o emisor del mail from@example.com a otro correo que sea de tu agrado para aparecer como remitente de los emails enviados desde el proyecto en Rails.

class ExampleMailer < ActionMailer::Base
 default from: "from@example.com"

def sample_email(user)
 @user = user
 mail(to: @user.email, subject: 'Aviso de nuevo usuario en el sistema')
 end
end

sample_email toma el parámetro user y envía el email al destinatario correspondiente. Ahora redactemos el email que será enviado al usuario, esto podemos hacerlo editando los archivos ubicados en la carpeta app/views/example_mailer. El primer archivo corresponde a un email en formato HTML, este es app/views/example_mailer/sample_email.html.erb:

<!DOCTYPE html>
<html>
 <head>
 <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
 </head>
 <body>
 <h1>Hi <%= @user.name %></h1>
 <p>
 Ejemplo de cómo usar SMTP en Rails 5.
 </p>
 </body>
</html>

También encontraremos el archivo app/views/example_mailer/sample_email.text.erb el cual corresponde al formato de texto para nuestro email:

Hi <%= @user.name %>
Ejemplo de cómo usar SMTP en Rails 5.

Cuando estamos en modo de desarrollo, podemos ver una previa de nuestros correos en http://localhost:3000/rails/mailers/example_mailer/sample_mail_preview.

Por defecto, Rails intenta enviar los correos electrónicos usando la configuración SMTP que está definida en el archivo /config/environments/production.rb. Veamos cuales son los archivos de configuración que necesitamos modificar para usar Gmail.

/config/application.yml

gmail_username: 'username@gmail.com'
gmail_password: 'Gmail password'

/config/environments/production.rb

config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
 :address => "smtp.gmail.com",
 :port => 587,
 :user_name => ENV['gmail_username'],
 :password => ENV['gmail_password'],
 :authentication => "plain",
:enable_starttls_auto => true
}

Finalmente, editaremos el UsersController para que dispare el envío de correo al administrador cuando se cree un nuevo usuario. Sólo necesitamos añadir ExampleMailer.sample_email(@user).deliver para definir el método app/controllers/users_controller.rb, quedando más menos como sigue:

def create
 @user = User.new(user_params)

respond_to do |format|
 if @user.save

# Sends email to user when user is created.
 ExampleMailer.sample_email(@user).deliver

format.html { redirect_to @user, notice: 'Usuario ha sido creado.' }
 format.json { render :show, status: :created, location: @user }
 else
 format.html { render :new }
 format.json { render json: @user.errors, status: :unprocessable_entity }
 end
 end
end

Cuando un nuevo usuario es creado en nuestro proyecto de Rails, se enviará un email avisando al administrador, mediante el uso de Action Mailer.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: