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 .