Ruby on Rails - E-Mails senden

Action Mailerist die Rails-Komponente, mit der Anwendungen E-Mails senden und empfangen können. In diesem Kapitel erfahren Sie, wie Sie eine E-Mail mit Rails senden. Beginnen wir mit der Erstellung einesemails Projekt mit dem folgenden Befehl.

tp> rails new mailtest

Dadurch wird der erforderliche Rahmen geschaffen, um fortzufahren. Jetzt beginnen wir mit der Konfiguration des ActionMailer.

Action Mailer - Konfiguration

Im Folgenden finden Sie die Schritte, die Sie ausführen müssen, um Ihre Konfiguration abzuschließen, bevor Sie mit der eigentlichen Arbeit fortfahren können:

Gehen Sie zum Konfigurationsordner Ihres E-Mail-Projekts, öffnen Sie die Datei environment.rb und fügen Sie die folgende Zeile am Ende dieser Datei hinzu.

config.action_mailer.delivery_method = :smtp

Es teilt ActionMailer mit, dass Sie den SMTP-Server verwenden möchten. Sie können auch Folgendes festlegen: sendmail, wenn Sie ein Unix-basiertes Betriebssystem wie Mac OS X oder Linux verwenden.

Fügen Sie die folgenden Codezeilen am unteren Rand Ihrer Umgebung hinzu.

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  
}

Ersetzen Sie jeden Hashwert durch die richtigen Einstellungen für Ihren SMTP-Server (Simple Mail Transfer Protocol). Sie können diese Informationen von Ihrem Internetdienstanbieter beziehen, wenn Sie dies noch nicht wissen. Sie müssen Portnummer 25 und Authentifizierungstyp nicht ändern, wenn Sie einen Standard-SMTP-Server verwenden.

Sie können auch das Standardformat für E-Mail-Nachrichten ändern. Wenn Sie E-Mails lieber im HTML-Format als im Nur-Text-Format senden möchten, fügen Sie die folgende Zeile ebenfalls zu config / environment.rb hinzu:

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

ActionMailer :: Base.default_content_type kann auf "text / plain", "text / html" und "text / angereichert" gesetzt werden. Der Standardwert ist "text / plain".

Der nächste Schritt besteht darin, einen Mailer zu erstellen

Generieren Sie einen Mailer

Verwenden Sie den folgenden Befehl, um einen Mailer wie folgt zu generieren:

tp> cd emails
emails> rails generate mailer Usermailer

Dadurch wird eine Datei user_mailer.rb im Verzeichnis app \ mailer erstellt. Überprüfen Sie den Inhalt dieser Datei wie folgt:

class Emailer < ActionMailer::Base
end

Erstellen wir eine Methode wie folgt:

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- Dies ist ein Hash von Standardwerten für jede E-Mail, die Sie von diesem Mailer senden. In diesem Fall setzen wir den: from-Header auf einen Wert für alle Nachrichten in dieser Klasse. Dies kann per E-Mail überschrieben werden

  • mail - Die eigentliche E-Mail-Nachricht übergeben wir den Betreff: an und: Betreff.

Erstellen Sie eine Datei mit dem Namen welcome_email.html.erb in app / views / user_mailer /. Dies ist die Vorlage für die E-Mail, formatiert 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>

Als nächstes erstellen wir einen Textteil für diese Anwendung wie folgt:

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!

Mailer anrufen

Lassen Sie uns zunächst ein einfaches Benutzergerüst erstellen

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

Action Mailer ist gut in Active Job integriert, sodass Sie E-Mails außerhalb des Anforderungs- / Antwortzyklus senden können, damit der Benutzer nicht darauf warten muss.

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

Testen Sie jetzt Ihre Anwendung mit http://127.0.0.1:3000/users/new. Der folgende Bildschirm wird angezeigt. Über diesen Bildschirm können Sie Ihre Nachricht an jeden senden.

Dies sendet Ihre Nachricht und zeigt die Textnachricht "Nachricht erfolgreich gesendet" an und gibt sie wie folgt aus:

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

Weitere Informationen zum Senden von E-Mails mit Rails finden Sie in ActionMailer .