Spec-Zone.ru › Ruby on Rails 8.1

класс ActionMailbox::Base

Родительский класс:
Object
Подключённые модули:
ActiveSupport::Rescuable

Базовый класс Action Mailbox

Базовый класс для всех почтовых ящиков приложения. Не предназначен для прямого наследования. Вместо этого наследуйтесь от ApplicationMailbox, поскольку именно там настраивается маршрутизация для конкретного приложения. Эта маршрутизация задаётся следующими способами:

class ApplicationMailbox < ActionMailbox::Base
  # Any of the recipients of the mail (whether to, cc, bcc) are matched against the regexp.
  routing /^replies@/i => :replies

  # Any of the recipients of the mail (whether to, cc, bcc) needs to be an exact match for the string.
  routing "help@example.com" => :help

  # Any callable (proc, lambda, etc) object is passed the inbound_email record and is a match if true.
  routing ->(inbound_email) { inbound_email.mail.to.size > 2 } => :multiple_recipients

  # Any object responding to #match? is called with the inbound_email record as an argument. Match if true.
  routing CustomAddress.new => :custom

  # Any inbound_email that has not been already matched will be sent to the BackstopMailbox.
  routing :all => :backstop
end

Классы почтовых ящиков приложения должны переопределять метод process, который вызывается фреймворком после выполнения обратных вызовов. Доступны следующие обратные вызовы: before_processing, after_processing и around_processing. Основной вариант использования — проверка выполнения определённых предварительных условий перед обработкой с помощью обратных вызовов before_processing.

Если предварительное условие не выполнено, можно остановить обработку с помощью метода bounced!, который незаметно предотвратит дальнейшую обработку, но не отправит уведомление об отклонении. Также можно совместить это поведение с вызовом класса Action Mailer, отвечающего за отправку фактического письма об отклонении. Для этого используется метод bounce_with, принимающий почтовый объект, возвращаемый методом Action Mailer, например:

class ForwardsMailbox < ApplicationMailbox
  before_processing :ensure_sender_is_a_user

  private
    def ensure_sender_is_a_user
      unless User.exist?(email_address: mail.from)
        bounce_with UserRequiredMailer.missing(inbound_email)
      end
    end
end

Во время обработки входящего письма отслеживается его статус. До начала обработки письмо обычно имеет статус pending. После начала обработки, непосредственно перед вызовом обратных вызовов и метода process, статус меняется на processing. Если обработка завершается успешно, статус меняется на delivered. Если инициируется отклонение, статус становится bounced. Если возникает необработанное исключение, статус становится failed.

Исключения можно обрабатывать на уровне класса с помощью привычного подхода ActiveSupport::Rescuable:

class ForwardsMailbox < ApplicationMailbox
  rescue_from(ApplicationSpecificVerificationError) { bounced! }
end

Атрибуты

inbound_email [R]

Общедоступные методы класса

new (inbound_email) Показать исходный код
# File actionmailbox/lib/action_mailbox/base.rb, line 79
def initialize(inbound_email)
  @inbound_email = inbound_email
end
receive (inbound_email) Показать исходный код
# File actionmailbox/lib/action_mailbox/base.rb, line 75
def self.receive(inbound_email)
  new(inbound_email).perform_processing
end

Общедоступные методы экземпляра

bounce_now_with (message) Показать исходный код
# File actionmailbox/lib/action_mailbox/base.rb, line 111
def bounce_now_with(message)
  inbound_email.bounced!
  message.deliver_now
end

Немедленно отправляет указанное message и меняет статус входящего письма на :bounced.

bounce_with (message) Показать исходный код
# File actionmailbox/lib/action_mailbox/base.rb, line 105
def bounce_with(message)
  inbound_email.bounced!
  message.deliver_later
end

Ставит указанное message в очередь на отправку и меняет статус входящего письма на :bounced.

process () Показать исходный код
# File actionmailbox/lib/action_mailbox/base.rb, line 96
def process
  # Override in subclasses
end

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

Spec-Zone.ru

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