actionmailbox 6.0.0.beta3 → 6.0.0.rc1
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 +6 -0
- data/README.md +1 -1
- data/app/controllers/action_mailbox/base_controller.rb +1 -5
- data/config/routes.rb +0 -1
- data/lib/action_mailbox/engine.rb +1 -10
- data/lib/action_mailbox/gem_version.rb +1 -1
- data/lib/action_mailbox/test_helper.rb +6 -6
- data/lib/rails/generators/installer.rb +1 -1
- metadata +14 -15
- data/app/controllers/action_mailbox/ingresses/amazon/inbound_emails_controller.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e82b7da2f169d4d6bf13afa006cdf70a48d87b77e97a5803fec37b47f9539121
|
4
|
+
data.tar.gz: 751b6859cca9e253c4fca9dffcb4d427b13b07ed5a3099c9246f63b41ff9bf15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c59f7ef02b4d29db030f65d4e79eeb2041bd05cb9b2a02bdc02d8e61a46919e37b196f2a38502d6b7c05c15fb8ec57a36a623884e2b61d1a16cfae3fab4889e1
|
7
|
+
data.tar.gz: 6eac7c28d3ea1911d6f021cffe23bdb44b913f4e37115eb24786ecc58ea42b584a9f2f0a4e087e5c4d927e14121c83323f6094916103655f2b33dab1aee0bfba
|
data/CHANGELOG.md
CHANGED
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
|
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
|
data/config/routes.rb
CHANGED
@@ -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
|
-
|
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
|
@@ -29,16 +29,16 @@ module ActionMailbox
|
|
29
29
|
create_inbound_email_from_fixture(*args).tap(&:route)
|
30
30
|
end
|
31
31
|
|
32
|
-
# Create an +InboundEmail+
|
33
|
-
#
|
32
|
+
# Create an +InboundEmail+ using the same arguments as +create_inbound_email_from_mail+ and immediately route it to
|
33
|
+
# processing.
|
34
34
|
def receive_inbound_email_from_mail(**kwargs)
|
35
35
|
create_inbound_email_from_mail(**kwargs).tap(&:route)
|
36
36
|
end
|
37
37
|
|
38
|
-
# Create an +InboundEmail+
|
39
|
-
#
|
40
|
-
def receive_inbound_email_from_source(
|
41
|
-
create_inbound_email_from_source(
|
38
|
+
# Create an +InboundEmail+ using the same arguments as +create_inbound_email_from_source+ and immediately route it
|
39
|
+
# to processing.
|
40
|
+
def receive_inbound_email_from_source(*args)
|
41
|
+
create_inbound_email_from_source(*args).tap(&:route)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
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 = :
|
8
|
+
# config.action_mailbox.ingress = :postfix
|
9
9
|
|
10
10
|
end_of_config
|
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.
|
4
|
+
version: 6.0.0.rc1
|
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-
|
12
|
+
date: 2019-04-24 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.
|
20
|
+
version: 6.0.0.rc1
|
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.
|
27
|
+
version: 6.0.0.rc1
|
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.
|
34
|
+
version: 6.0.0.rc1
|
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.
|
41
|
+
version: 6.0.0.rc1
|
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.
|
48
|
+
version: 6.0.0.rc1
|
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.
|
55
|
+
version: 6.0.0.rc1
|
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.
|
62
|
+
version: 6.0.0.rc1
|
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.
|
69
|
+
version: 6.0.0.rc1
|
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.
|
76
|
+
version: 6.0.0.rc1
|
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.
|
83
|
+
version: 6.0.0.rc1
|
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,8 @@ 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.
|
164
|
-
changelog_uri: https://github.com/rails/rails/blob/v6.0.0.
|
162
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.0.0.rc1/actionmailbox
|
163
|
+
changelog_uri: https://github.com/rails/rails/blob/v6.0.0.rc1/actionmailbox/CHANGELOG.md
|
165
164
|
post_install_message:
|
166
165
|
rdoc_options: []
|
167
166
|
require_paths:
|
@@ -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
|