Ruby on Rails - отправка электронных писем
Action Mailerэто компонент Rails, который позволяет приложениям отправлять и получать электронные письма. В этой главе мы увидим, как отправить электронное письмо с помощью Rails. Приступим к созданиюemails проект, используя следующую команду.
tp> rails new mailtest
Это создаст необходимую основу для продолжения. Теперь мы начнем с настройки ActionMailer.
Действие Mailer - Конфигурация
Ниже приведены шаги, которые вы должны выполнить, чтобы завершить настройку, прежде чем приступить к фактической работе.
Перейдите в папку config вашего проекта электронной почты, откройте файл environment.rb и добавьте следующую строку внизу этого файла.
config.action_mailer.delivery_method = :smtp
Он сообщает ActionMailer, что вы хотите использовать SMTP-сервер. Вы также можете установить его как: sendmail, если вы используете операционную систему на основе Unix, такую как Mac OS X или Linux.
Также добавьте следующие строки кода в конец файла 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
}
Замените каждое значение хеша соответствующими настройками для вашего SMTP-сервера. Вы можете получить эту информацию у своего интернет-провайдера, если вы еще не знаете. Вам не нужно менять номер порта 25 и тип аутентификации, если вы используете стандартный SMTP-сервер.
Вы также можете изменить формат сообщения электронной почты по умолчанию. Если вы предпочитаете отправлять электронную почту в формате HTML вместо обычного текстового формата, добавьте также следующую строку в config / environment.rb:
ActionMailer::Base.default_content_type = "text/html"
ActionMailer :: Base.default_content_type может иметь значение «text / plain», «text / html» и «text / enriched». Значение по умолчанию - «текст / обычный».
Следующим шагом будет создание почтовой программы
Создать почтовую программу
Используйте следующую команду для создания почтовой программы следующим образом:
tp> cd emails
emails> rails generate mailer Usermailer
Это создаст файл user_mailer.rb в каталоге app \ mailer. Проверьте содержимое этого файла следующим образом -
class Emailer < ActionMailer::Base
end
Давайте создадим один метод следующим образом -
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- Это хэш значений по умолчанию для любого электронного письма, которое вы отправляете из этой почтовой программы. В этом случае мы устанавливаем заголовок: from в значение для всех сообщений в этом классе. Это можно изменить для каждого электронного письма.
mail - Фактическое сообщение электронной почты, в котором мы передаем заголовки: to и: subject.
Создайте файл с именем welcome_email.html.erb в app / views / user_mailer /. Это будет шаблон электронного письма в формате 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>
Затем мы создадим текстовую часть для этого приложения следующим образом:
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!
Вызов почтовой программы
Во-первых, давайте создадим простой шаблон пользователя.
$ bin/rails generate scaffold user name email login
$ bin/rake db:migrate
Action Mailer прекрасно интегрирован с Active Job, поэтому вы можете отправлять электронные письма вне цикла запрос-ответ, поэтому пользователю не нужно ждать его -
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
Теперь протестируйте свое приложение, используя http://127.0.0.1:3000/users/new. Он отображает следующий экран, и с его помощью вы сможете отправить свое сообщение кому угодно.
Это отправит ваше сообщение и отобразит текстовое сообщение «Сообщение успешно отправлено» и выведет его следующим образом:
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
Для получения дополнительной информации о том, как отправлять электронные письма с помощью Rails, перейдите в ActionMailer .