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 .