Ruby on Rails - Enviar correos electrónicos

Action Maileres el componente Rails que permite a las aplicaciones enviar y recibir correos electrónicos. En este capítulo, veremos cómo enviar un correo electrónico usando Rails. Comencemos a crear unemails proyecto usando el siguiente comando.

tp> rails new mailtest

Esto creará el marco necesario para continuar. Ahora, comenzaremos con la configuración de ActionMailer.

Action Mailer - Configuración

Los siguientes son los pasos que debe seguir para completar su configuración antes de continuar con el trabajo real:

Vaya a la carpeta de configuración de su proyecto de correo electrónico y abra el archivo environment.rb y agregue la siguiente línea en la parte inferior de este archivo.

config.action_mailer.delivery_method = :smtp

Le dice a ActionMailer que desea utilizar el servidor SMTP. También puede configurarlo para que sea: sendmail si está utilizando un sistema operativo basado en Unix, como Mac OS X o Linux.

Agregue también las siguientes líneas de código al final de su environment.rb.

config.action_mailer.smtp_settings = {
   address:              'smtp.gmail.com',
   port:                 587,
   domain:               'example.com',
   user_name:            '<username>',
   password:             '<password>',
   authentication:       'plain',
   enable_starttls_auto: true  
}

Reemplace cada valor de hash con la configuración adecuada para su servidor de Protocolo simple de transferencia de correo (SMTP). Puede obtener esta información de su proveedor de servicios de Internet si ya no lo sabe. No es necesario cambiar el número de puerto 25 y el tipo de autenticación si está utilizando un servidor SMTP estándar.

También puede cambiar el formato de mensaje de correo electrónico predeterminado. Si prefiere enviar correos electrónicos en HTML en lugar de en formato de texto sin formato, agregue la siguiente línea a config / environment.rb también:

ActionMailer::Base.default_content_type = "text/html"

ActionMailer :: Base.default_content_type podría establecerse en "text / plain", "text / html" y "text / enriched". El valor predeterminado es "texto / sin formato".

El siguiente paso será crear un mailer

Generar un Mailer

Utilice el siguiente comando para generar un correo de la siguiente manera:

tp> cd emails
emails> rails generate mailer Usermailer

Esto creará un archivo user_mailer.rb en el directorio app \ mailer. Verifique el contenido de este archivo de la siguiente manera:

class Emailer < ActionMailer::Base
end

Creemos un método de la siguiente manera:

class UserMailer < ApplicationMailer
   default from: '[email protected]'
   
   def welcome_email(user)
      @user = user
      @url  = 'http://www.gmail.com'
      mail(to: @user.email, subject: 'Welcome to My Awesome Site')
   end
   
end
  • default Hash- Este es un hash de valores predeterminados para cualquier correo electrónico que envíe desde este correo. En este caso, estamos configurando el encabezado: from a un valor para todos los mensajes de esta clase. Esto se puede anular por correo electrónico

  • mail - El mensaje de correo electrónico real, estamos pasando los encabezados de asunto: a y:.

Cree un archivo llamado welcome_email.html.erb en app / views / user_mailer /. Esta será la plantilla utilizada para el correo electrónico, formateada en HTML -

<html>
   
   <head>
      <meta content = 'text/html; charset = UTF-8' http-equiv = 'Content-Type' />
   </head>
   
   <body>
      <h1>Welcome to example.com, <%= @user.name %></h1>
      
      <p>
         You have successfully signed up to example.com,your username is: 
         <%= @user.login %>.<br>
      </p>
      
      <p>
         To login to the site, just follow this link: 
         <%= @url %>.
      </p>
      
      <p>Thanks for joining and have a great day!</p>
      
   </body>
</html>

A continuación, crearemos una parte de texto para esta aplicación de la siguiente manera:

Welcome to example.com, <%= @user.name %>
===============================================
 
You have successfully signed up to example.com,
your username is: <%= @user.login %>.
 
To login to the site, just follow this link: <%= @url %>.
 
Thanks for joining and have a great day!

Llamando al Mailer

Primero, creemos un andamio de usuario simple

$ bin/rails generate scaffold user name email login
$ bin/rake db:migrate

Action Mailer está muy bien integrado con Active Job para que pueda enviar correos electrónicos fuera del ciclo de solicitud-respuesta, para que el usuario no tenga que esperar.

class UsersController < ApplicationController
   # POST /users
   # POST /users.json
   def create
   @user = User.new(params[:user])
   
      respond_to do |format|
         if @user.save
            # Tell the UserMailer to send a welcome email after save
            UserMailer.welcome_email(@user).deliver_later
            
            format.html { redirect_to(@user, notice: 'User was successfully created.') }
            format.json { render json: @user, status: :created, location: @user }
         else
            format.html { render action: 'new' }
            format.json { render json: @user.errors, status: :unprocessable_entity }
         end
         
      end
      
   end
end

Ahora, pruebe su aplicación usando http://127.0.0.1:3000/users/new. Muestra la siguiente pantalla y al usar esta pantalla, podrá enviar su mensaje a cualquier persona.

Esto enviará su mensaje y mostrará el mensaje de texto "Mensaje enviado con éxito" y saldrá de la siguiente manera:

sent mail to [email protected] (2023.Sms)
[ActiveJob] [ActionMailler::DeliveryJob] [2cfde3c-260e-4a33-1a6ada13a9b] Date: Thu, 09 Jul 2015 11:44:05 +0530
From: [email protected]
To: [email protected]
Message-Id: <[email protected]>
Subject: Welcome to My Awesome Site
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--mimepart_559e112d601c8_f1031e7f20233f5";
charset=UTF-8
Content-Transfer-Encoding:7bit

Para obtener más información sobre cómo enviar correos electrónicos mediante Rails, consulte ActionMailer .