Class: ActionMailbox::InboundEmail

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Incineratable, MessageId, Routable
Defined in:
app/models/action_mailbox/inbound_email.rb

Overview

The ‘InboundEmail` is an Active Record that keeps a reference to the raw email stored in Active Storage and tracks the status of processing. By default, incoming emails will go through the following lifecycle:

  • Pending: Just received by one of the ingress controllers and scheduled for routing.

  • Processing: During active processing, while a specific mailbox is running its #process method.

  • Delivered: Successfully processed by the specific mailbox.

  • Failed: An exception was raised during the specific mailbox’s execution of the ‘#process` method.

  • Bounced: Rejected processing by the specific mailbox and bounced to sender.

Once the ‘InboundEmail` has reached the status of being either `delivered`, `failed`, or `bounced`, it’ll count as having been ‘#processed?`. Once processed, the `InboundEmail` will be scheduled for automatic incineration at a later point.

When working with an ‘InboundEmail`, you’ll usually interact with the parsed version of the source, which is available as a ‘Mail` object from `#mail`. But you can also access the raw source directly using the `#source` method.

Examples:

inbound_email.mail.from # => '[email protected]'
inbound_email.source # Returns the full rfc822 source of the email as text

Defined Under Namespace

Modules: Incineratable, MessageId, Routable

Instance Method Summary collapse

Methods included from Incineratable

#incinerate, #incinerate_later

Methods included from Routable

#route, #route_later

Instance Method Details

#mailObject



32
33
34
# File 'app/models/action_mailbox/inbound_email.rb', line 32

def mail
  @mail ||= Mail.from_source(source)
end

#processed?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'app/models/action_mailbox/inbound_email.rb', line 40

def processed?
  delivered? || failed? || bounced?
end

#sourceObject



36
37
38
# File 'app/models/action_mailbox/inbound_email.rb', line 36

def source
  @source ||= raw_email.download
end