actionmailbox 6.0.0.beta3 → 6.0.2.rc2

Sign up to get free protection for your applications and to get access to all the features.
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