actionmailbox 7.0.8.1 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -147
- data/MIT-LICENSE +1 -1
- data/README.md +2 -2
- data/app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb +1 -0
- data/app/controllers/action_mailbox/ingresses/postmark/inbound_emails_controller.rb +1 -0
- data/app/controllers/action_mailbox/ingresses/relay/inbound_emails_controller.rb +9 -5
- data/app/controllers/action_mailbox/ingresses/sendgrid/inbound_emails_controller.rb +1 -0
- data/app/controllers/rails/conductor/action_mailbox/inbound_emails/sources_controller.rb +3 -1
- data/app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb +2 -0
- data/app/controllers/rails/conductor/action_mailbox/incinerates_controller.rb +2 -0
- data/app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb +2 -0
- data/app/models/action_mailbox/inbound_email/message_id.rb +1 -1
- data/app/models/action_mailbox/inbound_email.rb +9 -3
- data/app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb +3 -3
- data/config/routes.rb +1 -1
- data/db/migrate/20180917164000_create_action_mailbox_tables.rb +7 -1
- data/lib/action_mailbox/base.rb +24 -8
- data/lib/action_mailbox/callbacks.rb +2 -0
- data/lib/action_mailbox/deprecator.rb +7 -0
- data/lib/action_mailbox/engine.rb +4 -0
- data/lib/action_mailbox/gem_version.rb +3 -3
- data/lib/action_mailbox/mail_ext/addresses.rb +6 -2
- data/lib/action_mailbox/mail_ext/recipients.rb +2 -1
- data/lib/action_mailbox/router.rb +2 -0
- data/lib/action_mailbox/version.rb +1 -1
- data/lib/action_mailbox.rb +8 -0
- data/lib/rails/generators/mailbox/USAGE +1 -3
- data/lib/tasks/install.rake +1 -1
- metadata +23 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e57e9ec926760227bea1cd8ac42dcb3aeb89f3792bbe10ad797c4b701e16cf64
|
4
|
+
data.tar.gz: c625f666c32d06af1341ffe5eaa8a30ac37e58bc9ce63f6221752f3cb0214aa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c72292f4b13f4d22d78e968458ba0d96fc3db6ca5afda20569ebdf3d48edcba794fee9c2efe017318f487fd2d3e7bce6690c2b9aa81802a177b880ece49d90b9
|
7
|
+
data.tar.gz: 94f3d46deaf541cc3dba1069f17f3d9e88118221de437408f46549e3d303df8913fcd5465e1676614314e63c7b7485231d65338df6fb1f0689e205922b524e4b
|
data/CHANGELOG.md
CHANGED
@@ -1,170 +1,33 @@
|
|
1
|
-
## Rails 7.
|
1
|
+
## Rails 7.2.2.1 (December 10, 2024) ##
|
2
2
|
|
3
3
|
* No changes.
|
4
4
|
|
5
5
|
|
6
|
-
## Rails 7.
|
6
|
+
## Rails 7.2.2 (October 30, 2024) ##
|
7
7
|
|
8
8
|
* No changes.
|
9
9
|
|
10
10
|
|
11
|
-
## Rails 7.
|
11
|
+
## Rails 7.2.1.2 (October 23, 2024) ##
|
12
12
|
|
13
13
|
* No changes.
|
14
14
|
|
15
15
|
|
16
|
-
## Rails 7.
|
16
|
+
## Rails 7.2.1.1 (October 15, 2024) ##
|
17
17
|
|
18
18
|
* No changes.
|
19
19
|
|
20
20
|
|
21
|
-
## Rails 7.
|
21
|
+
## Rails 7.2.1 (August 22, 2024) ##
|
22
22
|
|
23
23
|
* No changes.
|
24
24
|
|
25
25
|
|
26
|
-
## Rails 7.0
|
26
|
+
## Rails 7.2.0 (August 09, 2024) ##
|
27
27
|
|
28
|
-
*
|
29
|
-
|
30
|
-
|
31
|
-
## Rails 7.0.5.1 (June 26, 2023) ##
|
32
|
-
|
33
|
-
* No changes.
|
34
|
-
|
35
|
-
|
36
|
-
## Rails 7.0.5 (May 24, 2023) ##
|
37
|
-
|
38
|
-
* No changes.
|
39
|
-
|
40
|
-
|
41
|
-
## Rails 7.0.4.3 (March 13, 2023) ##
|
42
|
-
|
43
|
-
* No changes.
|
44
|
-
|
45
|
-
|
46
|
-
## Rails 7.0.4.2 (January 24, 2023) ##
|
47
|
-
|
48
|
-
* No changes.
|
49
|
-
|
50
|
-
|
51
|
-
## Rails 7.0.4.1 (January 17, 2023) ##
|
52
|
-
|
53
|
-
* No changes.
|
54
|
-
|
55
|
-
|
56
|
-
## Rails 7.0.4 (September 09, 2022) ##
|
57
|
-
|
58
|
-
* No changes.
|
59
|
-
|
60
|
-
|
61
|
-
## Rails 7.0.3.1 (July 12, 2022) ##
|
62
|
-
|
63
|
-
* No changes.
|
64
|
-
|
65
|
-
|
66
|
-
## Rails 7.0.3 (May 09, 2022) ##
|
67
|
-
|
68
|
-
* No changes.
|
69
|
-
|
70
|
-
|
71
|
-
## Rails 7.0.2.4 (April 26, 2022) ##
|
72
|
-
|
73
|
-
* No changes.
|
74
|
-
|
75
|
-
|
76
|
-
## Rails 7.0.2.3 (March 08, 2022) ##
|
77
|
-
|
78
|
-
* No changes.
|
79
|
-
|
80
|
-
|
81
|
-
## Rails 7.0.2.2 (February 11, 2022) ##
|
82
|
-
|
83
|
-
* No changes.
|
84
|
-
|
85
|
-
|
86
|
-
## Rails 7.0.2.1 (February 11, 2022) ##
|
87
|
-
|
88
|
-
* No changes.
|
89
|
-
|
90
|
-
|
91
|
-
## Rails 7.0.2 (February 08, 2022) ##
|
92
|
-
|
93
|
-
* No changes.
|
94
|
-
|
95
|
-
|
96
|
-
## Rails 7.0.1 (January 06, 2022) ##
|
97
|
-
|
98
|
-
* No changes.
|
99
|
-
|
100
|
-
|
101
|
-
## Rails 7.0.0 (December 15, 2021) ##
|
102
|
-
|
103
|
-
* No changes.
|
104
|
-
|
105
|
-
|
106
|
-
## Rails 7.0.0.rc3 (December 14, 2021) ##
|
107
|
-
|
108
|
-
* No changes.
|
109
|
-
|
110
|
-
|
111
|
-
## Rails 7.0.0.rc2 (December 14, 2021) ##
|
112
|
-
|
113
|
-
* No changes.
|
114
|
-
|
115
|
-
## Rails 7.0.0.rc1 (December 06, 2021) ##
|
116
|
-
|
117
|
-
* Removed deprecated environment variable `MAILGUN_INGRESS_API_KEY`.
|
118
|
-
|
119
|
-
*Rafael Mendonça França*
|
120
|
-
|
121
|
-
* Removed deprecated `Rails.application.credentials.action_mailbox.mailgun_api_key`.
|
122
|
-
|
123
|
-
*Rafael Mendonça França*
|
124
|
-
|
125
|
-
|
126
|
-
## Rails 7.0.0.alpha2 (September 15, 2021) ##
|
127
|
-
|
128
|
-
* No changes.
|
129
|
-
|
130
|
-
|
131
|
-
## Rails 7.0.0.alpha1 (September 15, 2021) ##
|
132
|
-
|
133
|
-
* Add `attachments` to the list of permitted parameters for inbound emails conductor.
|
134
|
-
|
135
|
-
When using the conductor to test inbound emails with attachments, this prevents an
|
136
|
-
unpermitted parameter warning in default configurations, and prevents errors for
|
137
|
-
applications that set:
|
138
|
-
|
139
|
-
```ruby
|
140
|
-
config.action_controller.action_on_unpermitted_parameters = :raise
|
141
|
-
```
|
142
|
-
|
143
|
-
*David Jones*, *Dana Henke*
|
144
|
-
|
145
|
-
* Add ability to configure ActiveStorage service
|
146
|
-
for storing email raw source.
|
147
|
-
|
148
|
-
```yml
|
149
|
-
# config/storage.yml
|
150
|
-
incoming_emails:
|
151
|
-
service: Disk
|
152
|
-
root: /secure/dir/for/emails/only
|
153
|
-
```
|
154
|
-
|
155
|
-
```ruby
|
156
|
-
config.action_mailbox.storage_service = :incoming_emails
|
157
|
-
```
|
158
|
-
|
159
|
-
*Yurii Rashkovskii*
|
160
|
-
|
161
|
-
* Add ability to incinerate an inbound message through the conductor interface.
|
162
|
-
|
163
|
-
*Santiago Bartesaghi*
|
164
|
-
|
165
|
-
* OpenSSL constants are now used for Digest computations.
|
166
|
-
|
167
|
-
*Dirkjan Bussink*
|
28
|
+
* Fix all Action Mailbox database related models to respect
|
29
|
+
`ActiveRecord::Base.table_name_prefix` configuration.
|
168
30
|
|
31
|
+
*Chedli Bourguiba*
|
169
32
|
|
170
|
-
Please check [
|
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
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://
|
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
|
-
|
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
|
|
@@ -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
|
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
|
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
|
data/lib/action_mailbox/base.rb
CHANGED
@@ -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
|
-
|
83
|
-
|
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
|
@@ -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,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ActionMailbox
|
4
|
-
# Returns the currently loaded version of Action Mailbox as a
|
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 =
|
12
|
-
TINY =
|
11
|
+
MINOR = 2
|
12
|
+
TINY = 2
|
13
13
|
PRE = "1"
|
14
14
|
|
15
15
|
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
@@ -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
|
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
|
data/lib/action_mailbox.rb
CHANGED
@@ -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
|
data/lib/tasks/install.rake
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionmailbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
- George Claghorn
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -17,126 +17,84 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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,12 +165,12 @@ 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.
|
210
|
-
documentation_uri: https://api.rubyonrails.org/v7.
|
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.
|
171
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.2.2.1/actionmailbox
|
213
172
|
rubygems_mfa_required: 'true'
|
214
|
-
post_install_message:
|
173
|
+
post_install_message:
|
215
174
|
rdoc_options: []
|
216
175
|
require_paths:
|
217
176
|
- lib
|
@@ -219,15 +178,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
219
178
|
requirements:
|
220
179
|
- - ">="
|
221
180
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
181
|
+
version: 3.1.0
|
223
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
183
|
requirements:
|
225
184
|
- - ">="
|
226
185
|
- !ruby/object:Gem::Version
|
227
186
|
version: '0'
|
228
187
|
requirements: []
|
229
|
-
rubygems_version: 3.
|
230
|
-
signing_key:
|
188
|
+
rubygems_version: 3.5.22
|
189
|
+
signing_key:
|
231
190
|
specification_version: 4
|
232
191
|
summary: Inbound email handling framework.
|
233
192
|
test_files: []
|