Spec-Zone.ru › Ruby on Rails 7.2

Модуль ActionMailer

Action Mailer – Простая доставка и тестирование электронной почты

Action Mailer — это фреймворк для разработки слоёв сервиса электронной почты. Эти слои используются для консолидации кода для отправки забытых паролей, приветственных сообщений при регистрации, счетов для выставления счетов и любых других случаев, требующих письменного уведомления либо человека, либо другой системы.

Action Mailer по сути является оболочкой вокруг Action Controller и Mail gem. Он предоставляет способ создания электронных писем с помощью шаблонов так же, как Action Controller рендерит представления с помощью шаблонов.

Кроме того, класс Action Mailer может использоваться для обработки входящей электронной почты, например, позволяя блогу принимать новые сообщения из электронной почты (которая даже могла быть отправлена с телефона).

Вы можете узнать больше о Action Mailer в руководстве Основы Action Mailer.

Отправка электронных писем

Фреймворк работает путём инициализации любых переменных экземпляра, которые вы хотите видеть доступными в шаблоне письма, за которым следует вызов mail для доставки письма.

Это может быть так же просто, как:

class Notifier < ActionMailer::Base
  default from: 'system@loudthinking.com'

  def welcome(recipient)
    @recipient = recipient
    mail(to: recipient,
         subject: "[Signed up] Welcome #{recipient}")
  end
end

Тело письма создаётся с помощью шаблона Action View (обычного ERB), который содержит переменные экземпляра, объявленные в действии малера.

Таким образом, соответствующий шаблон тела для метода выше может выглядеть так:

Hello there,

Mr. <%= @recipient %>

Thank you for signing up!

Если получатель был указан как «david@loudthinking.com», сгенерированное письмо будет выглядеть так:

Date: Mon, 25 Jan 2010 22:48:09 +1100
From: system@loudthinking.com
To: david@loudthinking.com
Message-ID: <4b5d84f9dd6a5_7380800b81ac29578@void.loudthinking.com.mail>
Subject: [Signed up] Welcome david@loudthinking.com
Mime-Version: 1.0
Content-Type: text/plain;
    charset="US-ASCII";
Content-Transfer-Encoding: 7bit

Hello there,

Mr. david@loudthinking.com

Thank you for signing up!

Для отправки писем достаточно просто вызвать метод и затем вызвать deliver_now на возвращаемом значении.

Вызов метода возвращает объект Mail Message:

message = Notifier.welcome("david@loudthinking.com")   # => Returns a Mail::Message object
message.deliver_now                                    # => delivers the email

Или вы можете просто объединить методы вместе, как:

Notifier.welcome("david@loudthinking.com").deliver_now # Creates the email and sends it immediately

Установление значений по умолчанию

Возможна установка значений по умолчанию, которые будут использоваться в каждом методе вашего класса Action Mailer. Для реализации этой функциональности, просто вызовите общедоступный метод класса default, который вы получите бесплатно от ActionMailer::Base. Этот метод принимает Hash в качестве параметра. Вы можете использовать любой из заголовков, имеющихся у электронных сообщений, например, :from в качестве ключа. Вы также можете передать строку в качестве ключа, например, «Content-Type», но Action Mailer делает это за вас по умолчанию, поэтому вам не придётся об этом беспокоиться. Наконец, также возможно передать Proc, который будет оцениваться при необходимости.

Обратите внимание, что каждое значение, установленное этим методом, будет перезаписано, если вы используете тот же ключ в методе вашего малера.

Пример:

class AuthenticationMailer < ActionMailer::Base
  default from: "awesome@application.com", subject: Proc.new { "E-mail was generated at #{Time.now}" }
  .....
end

Настройка

Класс Base содержит полный список параметров конфигурации. Вот пример:

ActionMailer::Base.smtp_settings = {
  address:        'smtp.yourserver.com', # default: localhost
  port:           '25',                  # default: 25
  user_name:      'user',
  password:       'pass',
  authentication: :plain                 # :plain, :login or :cram_md5
}

Загрузка и установка

Последнюю версию Action Mailer можно установить с помощью RubyGems:

$ gem install actionmailer

Исходный код можно загрузить в рамках проекта Rails на GitHub:

  • github.com/rails/rails/tree/main/actionmailer

Лицензия

Action Mailer распространяется под лицензией MIT:

  • opensource.org/licenses/MIT

Поддержка

Документация API находится по адресу

  • api.rubyonrails.org

Отчёты об ошибках для проекта Ruby on Rails можно подать здесь:

  • github.com/rails/rails/issues

Запросы на новые функции следует обсуждать на списке рассылки rails-core здесь:

  • discuss.rubyonrails.org/c/rubyonrails-core

Методы публичного класса

eager_load!() Показать исходный код
# File actionmailer/lib/action_mailer.rb, line 61
def self.eager_load!
  super

  require "mail"
  Mail.eager_autoload!

  Base.descendants.each do |mailer|
    mailer.eager_load! unless mailer.abstract?
  end
end
Вызывает метод суперкласса
gem_version() Показать исходный код
# File actionmailer/lib/action_mailer/gem_version.rb, line 5
def self.gem_version
  Gem::Version.new VERSION::STRING
end

Возвращает текущую загруженную версию Action Mailer в виде строки.

version() Показать исходный код
# File actionmailer/lib/action_mailer/version.rb, line 8
def self.version
  gem_version
end

Возвращает текущую загруженную версию Action Mailer в виде строки.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API