Ruby on Rails - Invia email

Action Mailerè il componente Rails che consente alle applicazioni di inviare e ricevere email. In questo capitolo vedremo come inviare un'e-mail utilizzando Rails. Cominciamo a creare un fileemails progetto utilizzando il seguente comando.

tp> rails new mailtest

Questo creerà il framework richiesto per procedere. Ora inizieremo con la configurazione di ActionMailer.

Action Mailer - Configurazione

Di seguito sono riportati i passaggi da seguire per completare la configurazione prima di procedere con il lavoro effettivo:

Vai alla cartella di configurazione del tuo progetto di posta elettronica e apri il file environment.rb e aggiungi la seguente riga in fondo a questo file.

config.action_mailer.delivery_method = :smtp

Indica ad ActionMailer che desideri utilizzare il server SMTP. Puoi anche impostarlo come: sendmail se stai utilizzando un sistema operativo basato su Unix come Mac OS X o Linux.

Aggiungi anche le seguenti righe di codice nella parte inferiore del tuo 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  
}

Sostituisci ogni valore hash con le impostazioni appropriate per il tuo server SMTP (Simple Mail Transfer Protocol). Puoi richiedere queste informazioni al tuo provider di servizi Internet se già non lo sai. Non è necessario modificare il numero di porta 25 e il tipo di autenticazione se si utilizza un server SMTP standard.

È inoltre possibile modificare il formato predefinito del messaggio di posta elettronica. Se preferisci inviare e-mail in HTML invece che in formato testo, aggiungi anche la seguente riga a config / environment.rb -

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

ActionMailer :: Base.default_content_type potrebbe essere impostato su "text / plain", "text / html" e "text / arricchito". Il valore predefinito è "text / plain".

Il prossimo passo sarà creare un mailer

Genera un bollettino

Utilizzare il seguente comando per generare un mailer come segue:

tp> cd emails
emails> rails generate mailer Usermailer

Questo creerà un file user_mailer.rb nella directory app \ mailer. Controlla il contenuto di questo file come segue:

class Emailer < ActionMailer::Base
end

Creiamo un metodo come segue:

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- Questo è un hash dei valori predefiniti per qualsiasi email che invii da questo mailer. In questo caso stiamo impostando: from header su un valore per tutti i messaggi in questa classe. Questo può essere sovrascritto per e-mail

  • mail - Il messaggio di posta elettronica effettivo, stiamo passando le intestazioni: to e: subject in.

Crea un file chiamato welcome_email.html.erb in app / views / user_mailer /. Questo sarà il modello utilizzato per l'e-mail, formattato in 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>

Successivamente creeremo una parte di testo per questa applicazione come segue:

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!

Chiamando il bollettino

Per prima cosa, creiamo un semplice scaffold utente

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

Action Mailer è ben integrato con Active Job in modo da poter inviare e-mail al di fuori del ciclo di richiesta-risposta, in modo che l'utente non debba aspettare -

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

Ora, prova la tua applicazione usando http://127.0.0.1:3000/users/new. Visualizza la seguente schermata e utilizzando questa schermata, sarai in grado di inviare il tuo messaggio a chiunque.

Questo invierà il tuo messaggio e visualizzerà il messaggio di testo "Messaggio inviato con successo" e l'output come segue -

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

Per ulteriori informazioni su come inviare e-mail utilizzando Rails, passare ad ActionMailer .