actionmailbox 7.0.8.7 → 7.2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -177
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +2 -2
  5. data/app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb +1 -0
  6. data/app/controllers/action_mailbox/ingresses/postmark/inbound_emails_controller.rb +1 -0
  7. data/app/controllers/action_mailbox/ingresses/relay/inbound_emails_controller.rb +9 -5
  8. data/app/controllers/action_mailbox/ingresses/sendgrid/inbound_emails_controller.rb +1 -0
  9. data/app/controllers/rails/conductor/action_mailbox/inbound_emails/sources_controller.rb +3 -1
  10. data/app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb +2 -0
  11. data/app/controllers/rails/conductor/action_mailbox/incinerates_controller.rb +2 -0
  12. data/app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb +2 -0
  13. data/app/models/action_mailbox/inbound_email/message_id.rb +1 -1
  14. data/app/models/action_mailbox/inbound_email.rb +9 -3
  15. data/app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb +3 -3
  16. data/config/routes.rb +1 -1
  17. data/db/migrate/20180917164000_create_action_mailbox_tables.rb +7 -1
  18. data/lib/action_mailbox/base.rb +24 -8
  19. data/lib/action_mailbox/callbacks.rb +2 -0
  20. data/lib/action_mailbox/deprecator.rb +7 -0
  21. data/lib/action_mailbox/engine.rb +4 -0
  22. data/lib/action_mailbox/gem_version.rb +4 -4
  23. data/lib/action_mailbox/mail_ext/addresses.rb +6 -2
  24. data/lib/action_mailbox/mail_ext/recipients.rb +2 -1
  25. data/lib/action_mailbox/router.rb +2 -0
  26. data/lib/action_mailbox/version.rb +1 -1
  27. data/lib/action_mailbox.rb +8 -0
  28. data/lib/rails/generators/mailbox/USAGE +1 -3
  29. data/lib/tasks/install.rake +1 -1
  30. metadata +18 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87e84ee9639240f1be166073689857014358af08cb4c912a489df829733817a7
4
- data.tar.gz: 8abd6d25e366022eedfe5471ccabe16f12fbab607cafb804f27a3dc5af6b78a4
3
+ metadata.gz: e57e9ec926760227bea1cd8ac42dcb3aeb89f3792bbe10ad797c4b701e16cf64
4
+ data.tar.gz: c625f666c32d06af1341ffe5eaa8a30ac37e58bc9ce63f6221752f3cb0214aa6
5
5
  SHA512:
6
- metadata.gz: b7e589b378cf34e7d4fa92b0db7cfc97f6535841f1e95ac7415c01fd861f02d72c70cda24ff322551508d34e143eb1a6081b7ea6e5b59637e73d3fd3babd6f5d
7
- data.tar.gz: 28529ac770138a503df114da3b9ea6de9e36866339688f98300384a274d7715b0336d4fa9da4dbd2ba0b9b00d2ff97bcbfcff9bbb0ae700b2fc5de1c8948b3e1
6
+ metadata.gz: c72292f4b13f4d22d78e968458ba0d96fc3db6ca5afda20569ebdf3d48edcba794fee9c2efe017318f487fd2d3e7bce6690c2b9aa81802a177b880ece49d90b9
7
+ data.tar.gz: 94f3d46deaf541cc3dba1069f17f3d9e88118221de437408f46549e3d303df8913fcd5465e1676614314e63c7b7485231d65338df6fb1f0689e205922b524e4b
data/CHANGELOG.md CHANGED
@@ -1,200 +1,33 @@
1
- ## Rails 7.0.8.7 (December 10, 2024) ##
1
+ ## Rails 7.2.2.1 (December 10, 2024) ##
2
2
 
3
3
  * No changes.
4
4
 
5
5
 
6
- ## Rails 7.0.8.6 (October 23, 2024) ##
6
+ ## Rails 7.2.2 (October 30, 2024) ##
7
7
 
8
8
  * No changes.
9
9
 
10
10
 
11
- ## Rails 7.0.8.5 (October 15, 2024) ##
11
+ ## Rails 7.2.1.2 (October 23, 2024) ##
12
12
 
13
13
  * No changes.
14
14
 
15
15
 
16
- ## Rails 7.0.8.4 (June 04, 2024) ##
16
+ ## Rails 7.2.1.1 (October 15, 2024) ##
17
17
 
18
18
  * No changes.
19
19
 
20
20
 
21
- ## Rails 7.0.8.3 (May 17, 2024) ##
21
+ ## Rails 7.2.1 (August 22, 2024) ##
22
22
 
23
23
  * No changes.
24
24
 
25
25
 
26
- ## Rails 7.0.8.2 (May 16, 2024) ##
26
+ ## Rails 7.2.0 (August 09, 2024) ##
27
27
 
28
- * No changes.
29
-
30
-
31
- ## Rails 7.0.8.1 (February 21, 2024) ##
32
-
33
- * No changes.
34
-
35
-
36
- ## Rails 7.0.8 (September 09, 2023) ##
37
-
38
- * No changes.
39
-
40
-
41
- ## Rails 7.0.7.2 (August 22, 2023) ##
42
-
43
- * No changes.
44
-
45
-
46
- ## Rails 7.0.7.1 (August 22, 2023) ##
47
-
48
- * No changes.
49
-
50
-
51
- ## Rails 7.0.7 (August 09, 2023) ##
52
-
53
- * No changes.
54
-
55
-
56
- ## Rails 7.0.6 (June 29, 2023) ##
57
-
58
- * No changes.
59
-
60
-
61
- ## Rails 7.0.5.1 (June 26, 2023) ##
62
-
63
- * No changes.
64
-
65
-
66
- ## Rails 7.0.5 (May 24, 2023) ##
67
-
68
- * No changes.
69
-
70
-
71
- ## Rails 7.0.4.3 (March 13, 2023) ##
72
-
73
- * No changes.
74
-
75
-
76
- ## Rails 7.0.4.2 (January 24, 2023) ##
77
-
78
- * No changes.
79
-
80
-
81
- ## Rails 7.0.4.1 (January 17, 2023) ##
82
-
83
- * No changes.
84
-
85
-
86
- ## Rails 7.0.4 (September 09, 2022) ##
87
-
88
- * No changes.
89
-
90
-
91
- ## Rails 7.0.3.1 (July 12, 2022) ##
92
-
93
- * No changes.
94
-
95
-
96
- ## Rails 7.0.3 (May 09, 2022) ##
97
-
98
- * No changes.
99
-
100
-
101
- ## Rails 7.0.2.4 (April 26, 2022) ##
102
-
103
- * No changes.
104
-
105
-
106
- ## Rails 7.0.2.3 (March 08, 2022) ##
107
-
108
- * No changes.
109
-
110
-
111
- ## Rails 7.0.2.2 (February 11, 2022) ##
112
-
113
- * No changes.
114
-
115
-
116
- ## Rails 7.0.2.1 (February 11, 2022) ##
117
-
118
- * No changes.
119
-
120
-
121
- ## Rails 7.0.2 (February 08, 2022) ##
122
-
123
- * No changes.
124
-
125
-
126
- ## Rails 7.0.1 (January 06, 2022) ##
127
-
128
- * No changes.
129
-
130
-
131
- ## Rails 7.0.0 (December 15, 2021) ##
132
-
133
- * No changes.
134
-
135
-
136
- ## Rails 7.0.0.rc3 (December 14, 2021) ##
137
-
138
- * No changes.
139
-
140
-
141
- ## Rails 7.0.0.rc2 (December 14, 2021) ##
142
-
143
- * No changes.
144
-
145
- ## Rails 7.0.0.rc1 (December 06, 2021) ##
146
-
147
- * Removed deprecated environment variable `MAILGUN_INGRESS_API_KEY`.
148
-
149
- *Rafael Mendonça França*
150
-
151
- * Removed deprecated `Rails.application.credentials.action_mailbox.mailgun_api_key`.
152
-
153
- *Rafael Mendonça França*
154
-
155
-
156
- ## Rails 7.0.0.alpha2 (September 15, 2021) ##
157
-
158
- * No changes.
159
-
160
-
161
- ## Rails 7.0.0.alpha1 (September 15, 2021) ##
162
-
163
- * Add `attachments` to the list of permitted parameters for inbound emails conductor.
164
-
165
- When using the conductor to test inbound emails with attachments, this prevents an
166
- unpermitted parameter warning in default configurations, and prevents errors for
167
- applications that set:
168
-
169
- ```ruby
170
- config.action_controller.action_on_unpermitted_parameters = :raise
171
- ```
172
-
173
- *David Jones*, *Dana Henke*
174
-
175
- * Add ability to configure ActiveStorage service
176
- for storing email raw source.
177
-
178
- ```yml
179
- # config/storage.yml
180
- incoming_emails:
181
- service: Disk
182
- root: /secure/dir/for/emails/only
183
- ```
184
-
185
- ```ruby
186
- config.action_mailbox.storage_service = :incoming_emails
187
- ```
188
-
189
- *Yurii Rashkovskii*
190
-
191
- * Add ability to incinerate an inbound message through the conductor interface.
192
-
193
- *Santiago Bartesaghi*
194
-
195
- * OpenSSL constants are now used for Digest computations.
196
-
197
- *Dirkjan Bussink*
28
+ * Fix all Action Mailbox database related models to respect
29
+ `ActiveRecord::Base.table_name_prefix` configuration.
198
30
 
31
+ *Chedli Bourguiba*
199
32
 
200
- Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/actionmailbox/CHANGELOG.md) for previous changes.
33
+ Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionmailbox/CHANGELOG.md) for previous changes.
data/MIT-LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2018-2022 Basecamp, LLC
3
+ Copyright (c) 37signals LLC
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Action Mailbox
2
2
 
3
- Action Mailbox routes incoming emails to controller-like mailboxes for processing in Rails. It ships with ingresses for Mailgun, Mandrill, Postmark, and SendGrid. You can also handle inbound mails directly via the built-in Exim, Postfix, and Qmail ingresses.
3
+ Action Mailbox routes incoming emails to controller-like mailboxes for processing in \Rails. It ships with ingresses for Mailgun, Mandrill, Postmark, and SendGrid. You can also handle inbound mails directly via the built-in Exim, Postfix, and Qmail ingresses.
4
4
 
5
5
  The inbound emails are turned into `InboundEmail` records using Active Record and feature lifecycle tracking, storage of the original email on cloud storage via Active Storage, and responsible data handling with on-by-default incineration.
6
6
 
7
7
  These inbound emails are routed asynchronously using Active Job to one or several dedicated mailboxes, which are capable of interacting directly with the rest of your domain model.
8
8
 
9
- You can read more about Action Mailbox in the [Action Mailbox Basics](https://edgeguides.rubyonrails.org/action_mailbox_basics.html) guide.
9
+ You can read more about Action Mailbox in the [Action Mailbox Basics](https://guides.rubyonrails.org/action_mailbox_basics.html) guide.
10
10
 
11
11
  ## License
12
12
 
@@ -44,6 +44,7 @@ module ActionMailbox
44
44
  # <tt>https://example.com/rails/action_mailbox/mailgun/inbound_emails/mime</tt>.
45
45
  class Ingresses::Mailgun::InboundEmailsController < ActionMailbox::BaseController
46
46
  before_action :authenticate
47
+ param_encoding :create, "body-mime", Encoding::ASCII_8BIT
47
48
 
48
49
  def create
49
50
  ActionMailbox::InboundEmail.create_and_extract_message_id! mail
@@ -46,6 +46,7 @@ module ActionMailbox
46
46
  # content in JSON payload"*. Action Mailbox needs the raw email content to work.
47
47
  class Ingresses::Postmark::InboundEmailsController < ActionMailbox::BaseController
48
48
  before_action :authenticate_by_password
49
+ param_encoding :create, "RawEmail", Encoding::ASCII_8BIT
49
50
 
50
51
  def create
51
52
  ActionMailbox::InboundEmail.create_and_extract_message_id! params.require("RawEmail")
@@ -41,18 +41,22 @@ module ActionMailbox
41
41
  # If your application lives at <tt>https://example.com</tt>, you would configure the Postfix SMTP server to pipe
42
42
  # inbound emails to the following command:
43
43
  #
44
- # bin/rails action_mailbox:ingress:postfix URL=https://example.com/rails/action_mailbox/postfix/inbound_emails INGRESS_PASSWORD=...
44
+ # $ bin/rails action_mailbox:ingress:postfix URL=https://example.com/rails/action_mailbox/postfix/inbound_emails INGRESS_PASSWORD=...
45
45
  #
46
46
  # Built-in ingress commands are available for these popular SMTP servers:
47
47
  #
48
- # - Exim (<tt>bin/rails action_mailbox:ingress:exim)
49
- # - Postfix (<tt>bin/rails action_mailbox:ingress:postfix)
50
- # - Qmail (<tt>bin/rails action_mailbox:ingress:qmail)
48
+ # - Exim (<tt>bin/rails action_mailbox:ingress:exim</tt>)
49
+ # - Postfix (<tt>bin/rails action_mailbox:ingress:postfix</tt>)
50
+ # - Qmail (<tt>bin/rails action_mailbox:ingress:qmail</tt>)
51
51
  class Ingresses::Relay::InboundEmailsController < ActionMailbox::BaseController
52
52
  before_action :authenticate_by_password, :require_valid_rfc822_message
53
53
 
54
54
  def create
55
- ActionMailbox::InboundEmail.create_and_extract_message_id! request.body.read
55
+ if request.body
56
+ ActionMailbox::InboundEmail.create_and_extract_message_id! request.body.read
57
+ else
58
+ head :unprocessable_entity
59
+ end
56
60
  end
57
61
 
58
62
  private
@@ -46,6 +46,7 @@ module ActionMailbox
46
46
  # full MIME message."* Action Mailbox needs the raw MIME message to work.
47
47
  class Ingresses::Sendgrid::InboundEmailsController < ActionMailbox::BaseController
48
48
  before_action :authenticate_by_password
49
+ param_encoding :create, :email, Encoding::ASCII_8BIT
49
50
 
50
51
  def create
51
52
  ActionMailbox::InboundEmail.create_and_extract_message_id! mail
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :enddoc:
4
+
3
5
  module Rails
4
- class Conductor::ActionMailbox::InboundEmails::SourcesController < Rails::Conductor::BaseController
6
+ class Conductor::ActionMailbox::InboundEmails::SourcesController < Rails::Conductor::BaseController # :nodoc:
5
7
  def new
6
8
  end
7
9
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :enddoc:
4
+
3
5
  module Rails
4
6
  class Conductor::ActionMailbox::InboundEmailsController < Rails::Conductor::BaseController
5
7
  def index
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :enddoc:
4
+
3
5
  module Rails
4
6
  # Incinerating will destroy an email that is due and has already been processed.
5
7
  class Conductor::ActionMailbox::IncineratesController < Rails::Conductor::BaseController
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :enddoc:
4
+
3
5
  module Rails
4
6
  # Rerouting will run routing and processing on an email that has already been, or attempted to be, processed.
5
7
  class Conductor::ActionMailbox::ReroutesController < Rails::Conductor::BaseController
@@ -5,7 +5,7 @@
5
5
  # web request.
6
6
  #
7
7
  # If an inbound email does not, against the rfc822 mandate, specify a Message-ID, one will be generated
8
- # using the approach from <tt>Mail::MessageIdField</tt>.
8
+ # using the approach from +Mail::MessageIdField+.
9
9
  module ActionMailbox::InboundEmail::MessageId
10
10
  extend ActiveSupport::Concern
11
11
 
@@ -25,12 +25,10 @@ module ActionMailbox
25
25
  # inbound_email.mail.from # => 'david@loudthinking.com'
26
26
  # inbound_email.source # Returns the full rfc822 source of the email as text
27
27
  class InboundEmail < Record
28
- self.table_name = "action_mailbox_inbound_emails"
29
-
30
28
  include Incineratable, MessageId, Routable
31
29
 
32
30
  has_one_attached :raw_email, service: ActionMailbox.storage_service
33
- enum status: %i[ pending processing delivered failed bounced ]
31
+ enum :status, %i[ pending processing delivered failed bounced ]
34
32
 
35
33
  def mail
36
34
  @mail ||= Mail.from_source(source)
@@ -43,6 +41,14 @@ module ActionMailbox
43
41
  def processed?
44
42
  delivered? || failed? || bounced?
45
43
  end
44
+
45
+ def instrumentation_payload # :nodoc:
46
+ {
47
+ id: id,
48
+ message_id: message_id,
49
+ status: status
50
+ }
51
+ end
46
52
  end
47
53
  end
48
54
 
@@ -2,6 +2,9 @@
2
2
 
3
3
  <h1>All inbound emails</h1>
4
4
 
5
+ <%= link_to "New inbound email by form", main_app.new_rails_conductor_inbound_email_path %> |
6
+ <%= link_to "New inbound email by source", main_app.new_rails_conductor_inbound_email_source_path %>
7
+
5
8
  <table>
6
9
  <tr><th>Message ID</th><th>Status</th></tr>
7
10
  <% @inbound_emails.each do |inbound_email| %>
@@ -11,6 +14,3 @@
11
14
  </tr>
12
15
  <% end %>
13
16
  </table>
14
-
15
- <%= link_to "New inbound email by form", main_app.new_rails_conductor_inbound_email_path %> |
16
- <%= link_to "New inbound email by source", main_app.new_rails_conductor_inbound_email_source_path %>
data/config/routes.rb CHANGED
@@ -16,7 +16,7 @@ Rails.application.routes.draw do
16
16
 
17
17
  # TODO: Should these be mounted within the engine only?
18
18
  scope "rails/conductor/action_mailbox/", module: "rails/conductor/action_mailbox" do
19
- resources :inbound_emails, as: :rails_conductor_inbound_emails
19
+ resources :inbound_emails, as: :rails_conductor_inbound_emails, only: %i[index new show create]
20
20
  get "inbound_emails/sources/new", to: "inbound_emails/sources#new", as: :new_rails_conductor_inbound_email_source
21
21
  post "inbound_emails/sources", to: "inbound_emails/sources#create", as: :rails_conductor_inbound_email_sources
22
22
 
@@ -1,6 +1,6 @@
1
1
  class CreateActionMailboxTables < ActiveRecord::Migration[6.0]
2
2
  def change
3
- create_table :action_mailbox_inbound_emails do |t|
3
+ create_table :action_mailbox_inbound_emails, id: primary_key_type do |t|
4
4
  t.integer :status, default: 0, null: false
5
5
  t.string :message_id, null: false
6
6
  t.string :message_checksum, null: false
@@ -10,4 +10,10 @@ class CreateActionMailboxTables < ActiveRecord::Migration[6.0]
10
10
  t.index [ :message_id, :message_checksum ], name: "index_action_mailbox_inbound_emails_uniqueness", unique: true
11
11
  end
12
12
  end
13
+
14
+ private
15
+ def primary_key_type
16
+ config = Rails.configuration.generators
17
+ config.options[config.orm][:primary_key_type] || :primary_key
18
+ end
13
19
  end
@@ -6,6 +6,8 @@ require "action_mailbox/callbacks"
6
6
  require "action_mailbox/routing"
7
7
 
8
8
  module ActionMailbox
9
+ # = Action Mailbox \Base
10
+ #
9
11
  # The base class for all application mailboxes. Not intended to be inherited from directly. Inherit from
10
12
  # +ApplicationMailbox+ instead, as that's where the app-specific routing is configured. This routing
11
13
  # is specified in the following ways:
@@ -29,7 +31,7 @@ module ActionMailbox
29
31
  #
30
32
  # Application mailboxes need to override the #process method, which is invoked by the framework after
31
33
  # callbacks have been run. The callbacks available are: +before_processing+, +after_processing+, and
32
- # +around_processing+. The primary use case is ensure certain preconditions to processing are fulfilled
34
+ # +around_processing+. The primary use case is to ensure that certain preconditions to processing are fulfilled
33
35
  # using +before_processing+ callbacks.
34
36
  #
35
37
  # If a precondition fails to be met, you can halt the processing using the +#bounced!+ method,
@@ -79,14 +81,16 @@ module ActionMailbox
79
81
  end
80
82
 
81
83
  def perform_processing # :nodoc:
82
- track_status_of_inbound_email do
83
- run_callbacks :process do
84
- process
84
+ ActiveSupport::Notifications.instrument "process.action_mailbox", instrumentation_payload do
85
+ track_status_of_inbound_email do
86
+ run_callbacks :process do
87
+ process
88
+ end
85
89
  end
90
+ rescue => exception
91
+ # TODO: Include a reference to the inbound_email in the exception raised so error handling becomes easier
92
+ rescue_with_handler(exception) || raise
86
93
  end
87
- rescue => exception
88
- # TODO: Include a reference to the inbound_email in the exception raised so error handling becomes easier
89
- rescue_with_handler(exception) || raise
90
94
  end
91
95
 
92
96
  def process
@@ -97,14 +101,26 @@ module ActionMailbox
97
101
  inbound_email.delivered? || inbound_email.bounced?
98
102
  end
99
103
 
100
-
101
104
  # Enqueues the given +message+ for delivery and changes the inbound email's status to +:bounced+.
102
105
  def bounce_with(message)
103
106
  inbound_email.bounced!
104
107
  message.deliver_later
105
108
  end
106
109
 
110
+ # Immediately sends the given +message+ and changes the inbound email's status to +:bounced+.
111
+ def bounce_now_with(message)
112
+ inbound_email.bounced!
113
+ message.deliver_now
114
+ end
115
+
107
116
  private
117
+ def instrumentation_payload
118
+ {
119
+ mailbox: self,
120
+ inbound_email: inbound_email.instrumentation_payload
121
+ }
122
+ end
123
+
108
124
  def track_status_of_inbound_email
109
125
  inbound_email.processing!
110
126
  yield
@@ -3,6 +3,8 @@
3
3
  require "active_support/callbacks"
4
4
 
5
5
  module ActionMailbox
6
+ # = Action Mailbox \Callbacks
7
+ #
6
8
  # Defines the callbacks related to processing.
7
9
  module Callbacks
8
10
  extend ActiveSupport::Concern
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionMailbox
4
+ def self.deprecator # :nodoc:
5
+ @deprecator ||= ActiveSupport::Deprecation.new
6
+ end
7
+ end
@@ -22,6 +22,10 @@ module ActionMailbox
22
22
 
23
23
  config.action_mailbox.storage_service = nil
24
24
 
25
+ initializer "action_mailbox.deprecator", before: :load_environment_config do |app|
26
+ app.deprecators[:action_mailbox] = ActionMailbox.deprecator
27
+ end
28
+
25
29
  initializer "action_mailbox.config" do
26
30
  config.after_initialize do |app|
27
31
  ActionMailbox.logger = app.config.action_mailbox.logger || Rails.logger
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActionMailbox
4
- # Returns the currently loaded version of Action Mailbox as a <tt>Gem::Version</tt>.
4
+ # Returns the currently loaded version of Action Mailbox as a +Gem::Version+.
5
5
  def self.gem_version
6
6
  Gem::Version.new VERSION::STRING
7
7
  end
8
8
 
9
9
  module VERSION
10
10
  MAJOR = 7
11
- MINOR = 0
12
- TINY = 8
13
- PRE = "7"
11
+ MINOR = 2
12
+ TINY = 2
13
+ PRE = "1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -7,7 +7,7 @@ module Mail
7
7
  end
8
8
 
9
9
  def recipients_addresses
10
- to_addresses + cc_addresses + bcc_addresses + x_original_to_addresses
10
+ to_addresses + cc_addresses + bcc_addresses + x_original_to_addresses + x_forwarded_to_addresses
11
11
  end
12
12
 
13
13
  def to_addresses
@@ -26,9 +26,13 @@ module Mail
26
26
  Array(header[:x_original_to]).collect { |header| Mail::Address.new header.to_s }
27
27
  end
28
28
 
29
+ def x_forwarded_to_addresses
30
+ Array(header[:x_forwarded_to]).collect { |header| Mail::Address.new header.to_s }
31
+ end
32
+
29
33
  private
30
34
  def address_list(obj)
31
- if obj&.respond_to?(:element)
35
+ if obj.respond_to?(:element)
32
36
  # Mail 2.8+
33
37
  obj.element
34
38
  else
@@ -3,7 +3,8 @@
3
3
  module Mail
4
4
  class Message
5
5
  def recipients
6
- Array(to) + Array(cc) + Array(bcc) + Array(header[:x_original_to]).map(&:to_s)
6
+ Array(to) + Array(cc) + Array(bcc) + Array(header[:x_original_to]).map(&:to_s) +
7
+ Array(header[:x_forwarded_to]).map(&:to_s)
7
8
  end
8
9
  end
9
10
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActionMailbox
4
+ # = Action Mailbox \Router
5
+ #
4
6
  # Encapsulates the routes that live on the ApplicationMailbox and performs the actual routing when
5
7
  # an inbound_email is received.
6
8
  class Router
@@ -3,7 +3,7 @@
3
3
  require_relative "gem_version"
4
4
 
5
5
  module ActionMailbox
6
- # Returns the currently loaded version of Action Mailbox as a <tt>Gem::Version</tt>.
6
+ # Returns the currently loaded version of Action Mailbox as a +Gem::Version+.
7
7
  def self.version
8
8
  gem_version
9
9
  end
@@ -1,7 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support"
4
+ require "active_support/rails"
5
+ require "active_support/core_ext/numeric/time"
6
+
7
+ require "action_mailbox/version"
8
+ require "action_mailbox/deprecator"
3
9
  require "action_mailbox/mail_ext"
4
10
 
11
+ # :markup: markdown
12
+ # :include: ../README.md
5
13
  module ActionMailbox
6
14
  extend ActiveSupport::Autoload
7
15
 
@@ -1,11 +1,9 @@
1
1
  Description:
2
- ============
3
2
  Generates a new mailbox class in app/mailboxes and invokes your template
4
3
  engine and test framework generators.
5
4
 
6
5
  Example:
7
- ========
8
- bin/rails generate mailbox inbox
6
+ `bin/rails generate mailbox inbox`
9
7
 
10
8
  creates an InboxMailbox class and test:
11
9
  Mailbox: app/mailboxes/inbox_mailbox.rb
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- desc "Installs Action Mailbox and its dependencies"
3
+ desc "Install Action Mailbox and its dependencies"
4
4
  task "action_mailbox:install" do
5
5
  Rails::Command.invoke :generate, ["action_mailbox:install"]
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionmailbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.8.7
4
+ version: 7.2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -17,126 +17,84 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 7.0.8.7
20
+ version: 7.2.2.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 7.0.8.7
27
+ version: 7.2.2.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: activerecord
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 7.0.8.7
34
+ version: 7.2.2.1
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 7.0.8.7
41
+ version: 7.2.2.1
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: activestorage
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - '='
47
47
  - !ruby/object:Gem::Version
48
- version: 7.0.8.7
48
+ version: 7.2.2.1
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - '='
54
54
  - !ruby/object:Gem::Version
55
- version: 7.0.8.7
55
+ version: 7.2.2.1
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: activejob
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - '='
61
61
  - !ruby/object:Gem::Version
62
- version: 7.0.8.7
62
+ version: 7.2.2.1
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - '='
68
68
  - !ruby/object:Gem::Version
69
- version: 7.0.8.7
69
+ version: 7.2.2.1
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: actionpack
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - '='
75
75
  - !ruby/object:Gem::Version
76
- version: 7.0.8.7
76
+ version: 7.2.2.1
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - '='
82
82
  - !ruby/object:Gem::Version
83
- version: 7.0.8.7
83
+ version: 7.2.2.1
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: mail
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: 2.7.1
90
+ version: 2.8.0
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 2.7.1
98
- - !ruby/object:Gem::Dependency
99
- name: net-imap
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :runtime
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- - !ruby/object:Gem::Dependency
113
- name: net-pop
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
- type: :runtime
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: net-smtp
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '0'
133
- type: :runtime
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '0'
97
+ version: 2.8.0
140
98
  description: Receive and process incoming emails in Rails applications.
141
99
  email:
142
100
  - david@loudthinking.com
@@ -177,6 +135,7 @@ files:
177
135
  - lib/action_mailbox.rb
178
136
  - lib/action_mailbox/base.rb
179
137
  - lib/action_mailbox/callbacks.rb
138
+ - lib/action_mailbox/deprecator.rb
180
139
  - lib/action_mailbox/engine.rb
181
140
  - lib/action_mailbox/gem_version.rb
182
141
  - lib/action_mailbox/mail_ext.rb
@@ -206,10 +165,10 @@ licenses:
206
165
  - MIT
207
166
  metadata:
208
167
  bug_tracker_uri: https://github.com/rails/rails/issues
209
- changelog_uri: https://github.com/rails/rails/blob/v7.0.8.7/actionmailbox/CHANGELOG.md
210
- documentation_uri: https://api.rubyonrails.org/v7.0.8.7/
168
+ changelog_uri: https://github.com/rails/rails/blob/v7.2.2.1/actionmailbox/CHANGELOG.md
169
+ documentation_uri: https://api.rubyonrails.org/v7.2.2.1/
211
170
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
212
- source_code_uri: https://github.com/rails/rails/tree/v7.0.8.7/actionmailbox
171
+ source_code_uri: https://github.com/rails/rails/tree/v7.2.2.1/actionmailbox
213
172
  rubygems_mfa_required: 'true'
214
173
  post_install_message:
215
174
  rdoc_options: []
@@ -219,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
178
  requirements:
220
179
  - - ">="
221
180
  - !ruby/object:Gem::Version
222
- version: 2.7.0
181
+ version: 3.1.0
223
182
  required_rubygems_version: !ruby/object:Gem::Requirement
224
183
  requirements:
225
184
  - - ">="