emailbutler 0.8.4 → 0.8.5
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/README.md +1 -1
- data/app/controllers/emailbutler/webhooks_controller.rb +12 -0
- data/lib/emailbutler/configuration.rb +1 -1
- data/lib/emailbutler/container.rb +4 -0
- data/lib/emailbutler/version.rb +1 -1
- data/lib/emailbutler/webhooks/mappers/mailjet.rb +3 -7
- data/lib/emailbutler/webhooks/mappers/mailtrap.rb +30 -0
- data/lib/emailbutler/webhooks/mappers/mandrill.rb +30 -0
- data/lib/emailbutler/webhooks/mappers/resend.rb +3 -6
- data/lib/emailbutler/webhooks/mappers/sendgrid.rb +2 -6
- data/lib/emailbutler/webhooks/mappers/smtp2go.rb +3 -6
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 296cc3406157af31f3ec46810d33662b75f630ce784d1417c2e2ec911c314718
|
4
|
+
data.tar.gz: f5829e5fa9b3d06f276fdc00615fa37495d507c65f9931ff9bbd682050debed1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e074e7b90157b378365d76efd5295246219336e41330f349e68dc8a3ad4cd3fad309d0549a653754a30110055016ccf3337bfe4b939c560f79c96c844551ed8b
|
7
|
+
data.tar.gz: ce64d8fac91538107a2afb78ab84011de22c08eb08e726bc97dbb5da241e0178d2ed90ac92edfb007c72987bb0089c2c528e8b67fa529f3e740acde9dbc99e45
|
data/README.md
CHANGED
@@ -36,7 +36,7 @@ require 'emailbutler/adapters/active_record'
|
|
36
36
|
|
37
37
|
Emailbutler.configure do |config|
|
38
38
|
config.adapter = Emailbutler::Adapters::ActiveRecord.new # required
|
39
|
-
config.providers = %w[sendgrid smtp2go resend mailjet] # optional
|
39
|
+
config.providers = %w[sendgrid smtp2go resend mailjet mailtrap mandrill] # optional
|
40
40
|
config.ui_username = 'username' # optional
|
41
41
|
config.ui_password = 'password' # optional
|
42
42
|
config.ui_secured_environments = ['production'] # optional
|
@@ -26,6 +26,8 @@ module Emailbutler
|
|
26
26
|
when 'smtp2go' then Emailbutler::Container.resolve(:smtp2go_mapper)
|
27
27
|
when 'resend' then Emailbutler::Container.resolve(:resend_mapper)
|
28
28
|
when 'mailjet' then Emailbutler::Container.resolve(:mailjet_mapper)
|
29
|
+
when 'mailtrap' then Emailbutler::Container.resolve(:mailtrap_mapper)
|
30
|
+
when 'mandrill' then Emailbutler::Container.resolve(:mandrill_mapper)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -35,6 +37,8 @@ module Emailbutler
|
|
35
37
|
when 'smtp2go' then smtp2go_params
|
36
38
|
when 'resend' then resend_params
|
37
39
|
when 'mailjet' then mailjet_params
|
40
|
+
when 'mailtrap' then mailtrap_params
|
41
|
+
when 'mandrill' then mandrill_params
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
@@ -53,5 +57,13 @@ module Emailbutler
|
|
53
57
|
def mailjet_params
|
54
58
|
params.permit('event', 'time', 'Message_GUID')
|
55
59
|
end
|
60
|
+
|
61
|
+
def mailtrap_params
|
62
|
+
params.permit('events' => %w[event timestamp message_id])
|
63
|
+
end
|
64
|
+
|
65
|
+
def mandrill_params
|
66
|
+
params.permit('mandrill_events' => %w[event ts _id])
|
67
|
+
end
|
56
68
|
end
|
57
69
|
end
|
@@ -7,7 +7,7 @@ module Emailbutler
|
|
7
7
|
AVAILABLE_ADAPTERS = %w[
|
8
8
|
Emailbutler::Adapters::ActiveRecord
|
9
9
|
].freeze
|
10
|
-
AVAILABLE_PROVIDERS = %w[sendgrid smtp2go resend mailjet].freeze
|
10
|
+
AVAILABLE_PROVIDERS = %w[sendgrid smtp2go resend mailjet mailtrap mandrill].freeze
|
11
11
|
|
12
12
|
attr_accessor :adapter, :providers, :ui_username, :ui_password, :ui_secured_environments
|
13
13
|
|
@@ -5,6 +5,8 @@ require 'emailbutler/webhooks/mappers/sendgrid'
|
|
5
5
|
require 'emailbutler/webhooks/mappers/smtp2go'
|
6
6
|
require 'emailbutler/webhooks/mappers/resend'
|
7
7
|
require 'emailbutler/webhooks/mappers/mailjet'
|
8
|
+
require 'emailbutler/webhooks/mappers/mailtrap'
|
9
|
+
require 'emailbutler/webhooks/mappers/mandrill'
|
8
10
|
require 'emailbutler/webhooks/receiver'
|
9
11
|
|
10
12
|
module Emailbutler
|
@@ -24,6 +26,8 @@ module Emailbutler
|
|
24
26
|
register(:smtp2go_mapper) { Emailbutler::Webhooks::Mappers::Smtp2Go.new }
|
25
27
|
register(:resend_mapper) { Emailbutler::Webhooks::Mappers::Resend.new }
|
26
28
|
register(:mailjet_mapper) { Emailbutler::Webhooks::Mappers::Mailjet.new }
|
29
|
+
register(:mailtrap_mapper) { Emailbutler::Webhooks::Mappers::Mailtrap.new }
|
30
|
+
register(:mandrill_mapper) { Emailbutler::Webhooks::Mappers::Mandrill.new }
|
27
31
|
|
28
32
|
# webhook receiver
|
29
33
|
register(:webhooks_receiver) { Emailbutler::Webhooks::Receiver.new }
|
data/lib/emailbutler/version.rb
CHANGED
@@ -7,19 +7,15 @@ module Emailbutler
|
|
7
7
|
DELIVERABILITY_MAPPER = {
|
8
8
|
'sent' => 'processed',
|
9
9
|
'open' => 'delivered',
|
10
|
-
'click' => 'delivered'
|
11
|
-
'unsub' => 'failed',
|
12
|
-
'blocked' => 'failed',
|
13
|
-
'bounce' => 'failed',
|
14
|
-
'spam' => 'failed'
|
10
|
+
'click' => 'delivered'
|
15
11
|
}.freeze
|
16
12
|
|
17
13
|
def call(payload:)
|
18
14
|
payload.stringify_keys!
|
19
15
|
# message-id contains data like <uuid>
|
20
16
|
message_uuid = payload['Message_GUID']
|
21
|
-
status = DELIVERABILITY_MAPPER[payload['event']]
|
22
|
-
return [] if message_uuid.nil?
|
17
|
+
status = DELIVERABILITY_MAPPER[payload['event']] || Emailbutler::Message::FAILED
|
18
|
+
return [] if message_uuid.nil?
|
23
19
|
|
24
20
|
[
|
25
21
|
{
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Emailbutler
|
4
|
+
module Webhooks
|
5
|
+
module Mappers
|
6
|
+
class Mailtrap
|
7
|
+
DELIVERABILITY_MAPPER = {
|
8
|
+
'delivery' => 'delivered',
|
9
|
+
'open' => 'delivered',
|
10
|
+
'click' => 'delivered'
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
def call(payload:)
|
14
|
+
payload['events'].filter_map { |message|
|
15
|
+
message.stringify_keys!
|
16
|
+
message_uuid = message['message_id']
|
17
|
+
status = DELIVERABILITY_MAPPER[message['event']] || Emailbutler::Message::FAILED
|
18
|
+
next if message_uuid.nil?
|
19
|
+
|
20
|
+
{
|
21
|
+
message_uuid: message_uuid,
|
22
|
+
status: status,
|
23
|
+
timestamp: message['timestamp'] ? Time.at(message['timestamp']).utc.to_datetime : nil
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Emailbutler
|
4
|
+
module Webhooks
|
5
|
+
module Mappers
|
6
|
+
class Mandrill
|
7
|
+
DELIVERABILITY_MAPPER = {
|
8
|
+
'send' => 'processed',
|
9
|
+
'open' => 'delivered',
|
10
|
+
'click' => 'delivered'
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
def call(payload:)
|
14
|
+
payload['mandrill_events'].filter_map { |message|
|
15
|
+
message.stringify_keys!
|
16
|
+
message_uuid = message['_id']
|
17
|
+
status = DELIVERABILITY_MAPPER[message['event']] || Emailbutler::Message::FAILED
|
18
|
+
next if message_uuid.nil?
|
19
|
+
|
20
|
+
{
|
21
|
+
message_uuid: message_uuid,
|
22
|
+
status: status,
|
23
|
+
timestamp: message['ts'] ? Time.at(message['ts']).utc.to_datetime : nil
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -8,17 +8,14 @@ module Emailbutler
|
|
8
8
|
'email.sent' => 'processed',
|
9
9
|
'email.delivered' => 'delivered',
|
10
10
|
'email.opened' => 'delivered',
|
11
|
-
'email.clicked' => 'delivered'
|
12
|
-
'email.delivered_delayed' => 'failed',
|
13
|
-
'email.bounced' => 'failed',
|
14
|
-
'email.complained' => 'failed'
|
11
|
+
'email.clicked' => 'delivered'
|
15
12
|
}.freeze
|
16
13
|
|
17
14
|
def call(payload:)
|
18
15
|
payload.stringify_keys!
|
19
16
|
message_uuid = payload.dig('data', 'email_id')
|
20
|
-
status = DELIVERABILITY_MAPPER[payload['type']]
|
21
|
-
return [] if message_uuid.nil?
|
17
|
+
status = DELIVERABILITY_MAPPER[payload['type']] || Emailbutler::Message::FAILED
|
18
|
+
return [] if message_uuid.nil?
|
22
19
|
|
23
20
|
[
|
24
21
|
{
|
@@ -8,18 +8,14 @@ module Emailbutler
|
|
8
8
|
'processed' => 'processed',
|
9
9
|
'delivered' => 'delivered',
|
10
10
|
'open' => 'delivered',
|
11
|
-
'click' => 'delivered'
|
12
|
-
'deferred' => 'failed',
|
13
|
-
'bounce' => 'failed',
|
14
|
-
'dropped' => 'failed',
|
15
|
-
'spamreport' => 'failed'
|
11
|
+
'click' => 'delivered'
|
16
12
|
}.freeze
|
17
13
|
|
18
14
|
def call(payload:)
|
19
15
|
payload['_json'].filter_map { |message|
|
20
16
|
message.stringify_keys!
|
21
17
|
message_uuid = message['smtp-id'] || message['sg_message_id']
|
22
|
-
status = DELIVERABILITY_MAPPER[message['event']]
|
18
|
+
status = DELIVERABILITY_MAPPER[message['event']] || Emailbutler::Message::FAILED
|
23
19
|
next if message_uuid.nil? || status.nil?
|
24
20
|
|
25
21
|
{
|
@@ -8,18 +8,15 @@ module Emailbutler
|
|
8
8
|
'processed' => 'processed',
|
9
9
|
'delivered' => 'delivered',
|
10
10
|
'open' => 'delivered',
|
11
|
-
'click' => 'delivered'
|
12
|
-
'bounce' => 'failed',
|
13
|
-
'reject' => 'failed',
|
14
|
-
'spam' => 'failed'
|
11
|
+
'click' => 'delivered'
|
15
12
|
}.freeze
|
16
13
|
|
17
14
|
def call(payload:)
|
18
15
|
payload.stringify_keys!
|
19
16
|
# message-id contains data like <uuid>
|
20
17
|
message_uuid = payload['message-id'][1..-2]
|
21
|
-
status = DELIVERABILITY_MAPPER[payload['event']]
|
22
|
-
return [] if message_uuid.nil?
|
18
|
+
status = DELIVERABILITY_MAPPER[payload['event']] || Emailbutler::Message::FAILED
|
19
|
+
return [] if message_uuid.nil?
|
23
20
|
|
24
21
|
[
|
25
22
|
{
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emailbutler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdanov Anton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
11
|
+
date: 2024-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-container
|
@@ -245,6 +245,8 @@ files:
|
|
245
245
|
- lib/emailbutler/mailers/helpers.rb
|
246
246
|
- lib/emailbutler/version.rb
|
247
247
|
- lib/emailbutler/webhooks/mappers/mailjet.rb
|
248
|
+
- lib/emailbutler/webhooks/mappers/mailtrap.rb
|
249
|
+
- lib/emailbutler/webhooks/mappers/mandrill.rb
|
248
250
|
- lib/emailbutler/webhooks/mappers/resend.rb
|
249
251
|
- lib/emailbutler/webhooks/mappers/sendgrid.rb
|
250
252
|
- lib/emailbutler/webhooks/mappers/smtp2go.rb
|