actionmailbox 6.0.0.beta3 → 6.0.2.rc2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50a28970e03982d439be26d63aa1464d15507f55dcf9e771d7a3ba17124286a9
4
- data.tar.gz: 4ebd425202cb53f006bea15af290cbf5936042277b160013d66c1b1bb9478b86
3
+ metadata.gz: 7b1e50f146cddc2c8d1e64d99c23731ddf07d0522baa434df35185993a48a4df
4
+ data.tar.gz: 4606dd543728bc0c31f9189875aae00c47d72cfb37004f6bfb15fda84a2afe7b
5
5
  SHA512:
6
- metadata.gz: 95bd1e5e03444fc458933f744d427b16be8fbf65d750db18d3a7b972618e3c9ddb4646a616252fe6186d3203fb1f3b64f161a77005e36085272b2bf8b995e3e9
7
- data.tar.gz: 3466d052111e887bd06d05046dddc37584ffd06d48171b4ffec59454ee14b3f6737dbbedd2eb2eebf7f9a3b2ce5909b24d0fca71b28e02c356534d980ef605c8
6
+ metadata.gz: c530f0b24dff31d51616e6d942b108105316de7d10ebaa26da4cbe7b389d5b6280859bd2c97592bb078a2d4618734f694e948bfa1ff75aab1c1cf1c05a587bf9
7
+ data.tar.gz: 25db6c477fc6f8685d762bb0be34f10383fa0672d8cd657cef3916dc5191035311389dd3f1dfa535cbf82d6433b0855aadd48537ac6901aa556b812551322e66
@@ -1,3 +1,30 @@
1
+ ## Rails 6.0.2.rc2 (December 09, 2019) ##
2
+
3
+ * No changes.
4
+
5
+
6
+ ## Rails 6.0.1 (November 5, 2019) ##
7
+
8
+ * No changes.
9
+
10
+
11
+ ## Rails 6.0.0 (August 16, 2019) ##
12
+
13
+ * Fix Bcc header not being included with emails from `create_inbound_email_from` test helpers.
14
+
15
+ *jduff*
16
+
17
+
18
+ ## Rails 6.0.0.rc2 (July 22, 2019) ##
19
+
20
+ * No changes.
21
+
22
+
23
+ ## Rails 6.0.0.rc1 (April 24, 2019) ##
24
+
25
+ * No changes.
26
+
27
+
1
28
  ## Rails 6.0.0.beta3 (March 11, 2019) ##
2
29
 
3
30
  * No changes.
@@ -11,6 +38,7 @@
11
38
 
12
39
  *Pratik Naik*
13
40
 
41
+
14
42
  ## Rails 6.0.0.beta1 (January 18, 2019) ##
15
43
 
16
44
  * Added to Rails.
data/README.md CHANGED
@@ -1,6 +1,6 @@
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 Amazon SES, 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
 
@@ -3,14 +3,10 @@
3
3
  module ActionMailbox
4
4
  # The base class for all Action Mailbox ingress controllers.
5
5
  class BaseController < ActionController::Base
6
- skip_forgery_protection
6
+ skip_forgery_protection if default_protect_from_forgery
7
7
 
8
8
  before_action :ensure_configured
9
9
 
10
- def self.prepare
11
- # Override in concrete controllers to run code on load.
12
- end
13
-
14
10
  private
15
11
  def ensure_configured
16
12
  unless ActionMailbox.ingress == ingress_name
@@ -21,8 +21,9 @@ module Rails
21
21
  private
22
22
  def new_mail
23
23
  Mail.new(params.require(:mail).permit(:from, :to, :cc, :bcc, :in_reply_to, :subject, :body).to_h).tap do |mail|
24
+ mail[:bcc]&.include_in_headers = true
24
25
  params[:mail][:attachments].to_a.each do |attachment|
25
- mail.add_file(filename: attachment.path, content: attachment.read)
26
+ mail.add_file(filename: attachment.original_filename, content: attachment.read)
26
27
  end
27
28
  end
28
29
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  Rails.application.routes.draw do
4
4
  scope "/rails/action_mailbox", module: "action_mailbox/ingresses" do
5
- post "/amazon/inbound_emails" => "amazon/inbound_emails#create", as: :rails_amazon_inbound_emails
6
5
  post "/mandrill/inbound_emails" => "mandrill/inbound_emails#create", as: :rails_mandrill_inbound_emails
7
6
  post "/postmark/inbound_emails" => "postmark/inbound_emails#create", as: :rails_postmark_inbound_emails
8
7
  post "/relay/inbound_emails" => "relay/inbound_emails#create", as: :rails_relay_inbound_emails
@@ -26,16 +26,7 @@ module ActionMailbox
26
26
  ActionMailbox.incinerate = app.config.action_mailbox.incinerate.nil? ? true : app.config.action_mailbox.incinerate
27
27
  ActionMailbox.incinerate_after = app.config.action_mailbox.incinerate_after || 30.days
28
28
  ActionMailbox.queues = app.config.action_mailbox.queues || {}
29
- end
30
- end
31
-
32
- initializer "action_mailbox.ingress" do |app|
33
- config.to_prepare do
34
- if ActionMailbox.ingress = app.config.action_mailbox.ingress.presence
35
- if ingress_controller_class = "ActionMailbox::Ingresses::#{ActionMailbox.ingress.to_s.classify}::InboundEmailsController".safe_constantize
36
- ingress_controller_class.prepare
37
- end
38
- end
29
+ ActionMailbox.ingress = app.config.action_mailbox.ingress
39
30
  end
40
31
  end
41
32
  end
@@ -9,8 +9,8 @@ module ActionMailbox
9
9
  module VERSION
10
10
  MAJOR = 6
11
11
  MINOR = 0
12
- TINY = 0
13
- PRE = "beta3"
12
+ TINY = 2
13
+ PRE = "rc2"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -14,7 +14,11 @@ module ActionMailbox
14
14
  #
15
15
  # create_inbound_email_from_mail(from: "david@loudthinking.com", subject: "Hello!")
16
16
  def create_inbound_email_from_mail(status: :processing, **mail_options)
17
- create_inbound_email_from_source Mail.new(mail_options).to_s, status: status
17
+ mail = Mail.new(mail_options)
18
+ # Bcc header is not encoded by default
19
+ mail[:bcc].include_in_headers = true if mail[:bcc]
20
+
21
+ create_inbound_email_from_source mail.to_s, status: status
18
22
  end
19
23
 
20
24
  # Create an +InboundEmail+ using the raw rfc822 +source+ as text.
@@ -29,16 +33,16 @@ module ActionMailbox
29
33
  create_inbound_email_from_fixture(*args).tap(&:route)
30
34
  end
31
35
 
32
- # Create an +InboundEmail+ from fixture using the same arguments as +create_inbound_email_from_mail+
33
- # and immediately route it to processing.
36
+ # Create an +InboundEmail+ using the same arguments as +create_inbound_email_from_mail+ and immediately route it to
37
+ # processing.
34
38
  def receive_inbound_email_from_mail(**kwargs)
35
39
  create_inbound_email_from_mail(**kwargs).tap(&:route)
36
40
  end
37
41
 
38
- # Create an +InboundEmail+ from fixture using the same arguments as +create_inbound_email_from_source+
39
- # and immediately route it to processing.
40
- def receive_inbound_email_from_source(**kwargs)
41
- create_inbound_email_from_source(**kwargs).tap(&:route)
42
+ # Create an +InboundEmail+ using the same arguments as +create_inbound_email_from_source+ and immediately route it
43
+ # to processing.
44
+ def receive_inbound_email_from_source(*args)
45
+ create_inbound_email_from_source(*args).tap(&:route)
42
46
  end
43
47
  end
44
48
  end
@@ -5,6 +5,6 @@ copy_file "#{__dir__}/mailbox/templates/application_mailbox.rb", "app/mailboxes/
5
5
 
6
6
  environment <<~end_of_config, env: "production"
7
7
  # Prepare the ingress controller used to receive mail
8
- # config.action_mailbox.ingress = :amazon
8
+ # config.action_mailbox.ingress = :relay
9
9
 
10
10
  end_of_config
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require "test_helper"
4
2
 
5
3
  class <%= class_name %>MailboxTest < ActionMailbox::TestCase
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: 6.0.0.beta3
4
+ version: 6.0.2.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-03-13 00:00:00.000000000 Z
12
+ date: 2019-12-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -17,70 +17,70 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 6.0.0.beta3
20
+ version: 6.0.2.rc2
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: 6.0.0.beta3
27
+ version: 6.0.2.rc2
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: 6.0.0.beta3
34
+ version: 6.0.2.rc2
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: 6.0.0.beta3
41
+ version: 6.0.2.rc2
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: 6.0.0.beta3
48
+ version: 6.0.2.rc2
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: 6.0.0.beta3
55
+ version: 6.0.2.rc2
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: 6.0.0.beta3
62
+ version: 6.0.2.rc2
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: 6.0.0.beta3
69
+ version: 6.0.2.rc2
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: 6.0.0.beta3
76
+ version: 6.0.2.rc2
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: 6.0.0.beta3
83
+ version: 6.0.2.rc2
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: mail
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -107,7 +107,6 @@ files:
107
107
  - MIT-LICENSE
108
108
  - README.md
109
109
  - app/controllers/action_mailbox/base_controller.rb
110
- - app/controllers/action_mailbox/ingresses/amazon/inbound_emails_controller.rb
111
110
  - app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb
112
111
  - app/controllers/action_mailbox/ingresses/mandrill/inbound_emails_controller.rb
113
112
  - app/controllers/action_mailbox/ingresses/postmark/inbound_emails_controller.rb
@@ -160,8 +159,11 @@ homepage: https://rubyonrails.org
160
159
  licenses:
161
160
  - MIT
162
161
  metadata:
163
- source_code_uri: https://github.com/rails/rails/tree/v6.0.0.beta3/actionmailbox
164
- changelog_uri: https://github.com/rails/rails/blob/v6.0.0.beta3/actionmailbox/CHANGELOG.md
162
+ bug_tracker_uri: https://github.com/rails/rails/issues
163
+ changelog_uri: https://github.com/rails/rails/blob/v6.0.2.rc2/actionmailbox/CHANGELOG.md
164
+ documentation_uri: https://api.rubyonrails.org/v6.0.2.rc2/
165
+ mailing_list_uri: https://groups.google.com/forum/#!forum/rubyonrails-talk
166
+ source_code_uri: https://github.com/rails/rails/tree/v6.0.2.rc2/actionmailbox
165
167
  post_install_message:
166
168
  rdoc_options: []
167
169
  require_paths:
@@ -177,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
179
  - !ruby/object:Gem::Version
178
180
  version: 1.3.1
179
181
  requirements: []
180
- rubygems_version: 3.0.1
182
+ rubygems_version: 3.0.3
181
183
  signing_key:
182
184
  specification_version: 4
183
185
  summary: Inbound email handling framework.
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActionMailbox
4
- # Ingests inbound emails from Amazon's Simple Email Service (SES).
5
- #
6
- # Requires the full RFC 822 message in the +content+ parameter. Authenticates requests by validating their signatures.
7
- #
8
- # Returns:
9
- #
10
- # - <tt>204 No Content</tt> if an inbound email is successfully recorded and enqueued for routing to the appropriate mailbox
11
- # - <tt>401 Unauthorized</tt> if the request's signature could not be validated
12
- # - <tt>404 Not Found</tt> if Action Mailbox is not configured to accept inbound emails from SES
13
- # - <tt>422 Unprocessable Entity</tt> if the request is missing the required +content+ parameter
14
- # - <tt>500 Server Error</tt> if one of the Active Record database, the Active Storage service, or
15
- # the Active Job backend is misconfigured or unavailable
16
- #
17
- # == Usage
18
- #
19
- # 1. Install the {aws-sdk-sns}[https://rubygems.org/gems/aws-sdk-sns] gem:
20
- #
21
- # # Gemfile
22
- # gem "aws-sdk-sns", ">= 1.9.0", require: false
23
- #
24
- # 2. Tell Action Mailbox to accept emails from SES:
25
- #
26
- # # config/environments/production.rb
27
- # config.action_mailbox.ingress = :amazon
28
- #
29
- # 3. {Configure SES}[https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-notifications.html]
30
- # to deliver emails to your application via POST requests to +/rails/action_mailbox/amazon/inbound_emails+.
31
- # If your application lived at <tt>https://example.com</tt>, you would specify the fully-qualified URL
32
- # <tt>https://example.com/rails/action_mailbox/amazon/inbound_emails</tt>.
33
- class Ingresses::Amazon::InboundEmailsController < BaseController
34
- before_action :authenticate
35
-
36
- cattr_accessor :verifier
37
-
38
- def self.prepare
39
- self.verifier ||= begin
40
- require "aws-sdk-sns"
41
- Aws::SNS::MessageVerifier.new
42
- end
43
- end
44
-
45
- def create
46
- ActionMailbox::InboundEmail.create_and_extract_message_id! params.require(:content)
47
- end
48
-
49
- private
50
- def authenticate
51
- head :unauthorized unless verifier.authentic?(request.body)
52
- end
53
- end
54
- end