Ruby on Rails - Envoyer des e-mails

Action Mailerest le composant Rails qui permet aux applications d'envoyer et de recevoir des e-mails. Dans ce chapitre, nous verrons comment envoyer un email à l'aide de Rails. Commençons par créer unemails projet à l'aide de la commande suivante.

tp> rails new mailtest

Cela créera le cadre requis pour continuer. Maintenant, nous allons commencer par configurer l'ActionMailer.

Mailer d'action - Configuration

Voici les étapes à suivre pour terminer votre configuration avant de procéder au travail proprement dit -

Accédez au dossier de configuration de votre projet de courrier électronique et ouvrez le fichier environment.rb et ajoutez la ligne suivante au bas de ce fichier.

config.action_mailer.delivery_method = :smtp

Il indique à ActionMailer que vous souhaitez utiliser le serveur SMTP. Vous pouvez également le définir sur: sendmail si vous utilisez un système d'exploitation basé sur Unix tel que Mac OS X ou Linux.

Ajoutez également les lignes de code suivantes au bas de votre environnement.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  
}

Remplacez chaque valeur de hachage par les paramètres appropriés pour votre serveur SMTP (Simple Mail Transfer Protocol). Vous pouvez récupérer ces informations auprès de votre fournisseur d'accès Internet si vous ne le savez pas déjà. Vous n'avez pas besoin de modifier le numéro de port 25 et le type d'authentification si vous utilisez un serveur SMTP standard.

Vous pouvez également modifier le format de message électronique par défaut. Si vous préférez envoyer des e-mails au format HTML plutôt qu'au format texte brut, ajoutez également la ligne suivante à config / environment.rb -

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

ActionMailer :: Base.default_content_type peut être défini sur "text / plain", "text / html" et "text / enriched". La valeur par défaut est "text / plain".

La prochaine étape sera de créer un mailer

Générer un mailer

Utilisez la commande suivante pour générer un mailer comme suit -

tp> cd emails
emails> rails generate mailer Usermailer

Cela créera un fichier user_mailer.rb dans le répertoire app \ mailer. Vérifiez le contenu de ce fichier comme suit -

class Emailer < ActionMailer::Base
end

Créons une méthode comme suit -

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- Il s'agit d'un hachage des valeurs par défaut pour tout e-mail que vous envoyez à partir de ce mailer. Dans ce cas, nous définissons l'en-tête: from sur une valeur pour tous les messages de cette classe. Cela peut être remplacé par e-mail

  • mail - Le message électronique réel, nous transmettons les en-têtes: to et: subject dans.

Créez un fichier appelé welcome_email.html.erb dans app / views / user_mailer /. Ce sera le modèle utilisé pour l'e-mail, formaté 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>

Ensuite, nous allons créer une partie de texte pour cette application comme suit -

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!

Appeler l'expéditeur

Tout d'abord, créons un échafaudage utilisateur simple

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

Action Mailer est bien intégré à Active Job afin que vous puissiez envoyer des e-mails en dehors du cycle de demande-réponse, afin que l'utilisateur n'ait pas à attendre dessus -

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

Maintenant, testez votre application en utilisant http://127.0.0.1:3000/users/new. Il affiche l'écran suivant et en utilisant cet écran, vous pourrez envoyer votre message à n'importe qui.

Cela enverra votre message et affichera le message texte "Message envoyé avec succès" et sortira comme suit -

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

Pour plus d'informations sur l'envoi d'e-mails à l'aide de Rails, veuillez consulter ActionMailer .