emailbutler 0.8.3 → 0.8.5

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: d753748defc72a9be03be5ce3b5292ac438ccb040babd44955968a73515805f5
4
- data.tar.gz: 6a962a4ae519be7280a0bf90ec2fa4e1283a7431967d070899164446d74a4b66
3
+ metadata.gz: 296cc3406157af31f3ec46810d33662b75f630ce784d1417c2e2ec911c314718
4
+ data.tar.gz: f5829e5fa9b3d06f276fdc00615fa37495d507c65f9931ff9bbd682050debed1
5
5
  SHA512:
6
- metadata.gz: e84a65be9929fee1171136cf07190c42c9d6004171ee080fb87e46ea31587252ad231d7e4530aa1ca05deac266ac0903ca5055f0e20b84d720f26549c96ab64a
7
- data.tar.gz: cc7bcf25f40122b0efe390b01e8c42cf76eef2fea4894376dec8a2e872cda5ca3ba9aaee858e8666f3417a6a859842480fde431c2394ab4bf11ef61119db5089
6
+ metadata.gz: e074e7b90157b378365d76efd5295246219336e41330f349e68dc8a3ad4cd3fad309d0549a653754a30110055016ccf3337bfe4b939c560f79c96c844551ed8b
7
+ data.tar.gz: ce64d8fac91538107a2afb78ab84011de22c08eb08e726bc97dbb5da241e0178d2ed90ac92edfb007c72987bb0089c2c528e8b67fa529f3e740acde9dbc99e45
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ <img align="right" alt="emailbutler" src="https://raw.githubusercontent.com/kortirso/emailbutler/master/logo.svg?sanitize=true">
2
+
1
3
  # Emailbutler
2
4
  Simple email tracker for Ruby on Rails applications.
3
5
  Emailbutler allows you to track delivery status of emails sent by your app through Sendgrid, SMTP2GO, Resend, Mailjet.
@@ -34,7 +36,7 @@ require 'emailbutler/adapters/active_record'
34
36
 
35
37
  Emailbutler.configure do |config|
36
38
  config.adapter = Emailbutler::Adapters::ActiveRecord.new # required
37
- config.providers = %w[sendgrid smtp2go resend mailjet] # optional
39
+ config.providers = %w[sendgrid smtp2go resend mailjet mailtrap mandrill] # optional
38
40
  config.ui_username = 'username' # optional
39
41
  config.ui_password = 'password' # optional
40
42
  config.ui_secured_environments = ['production'] # optional
@@ -139,3 +141,7 @@ Emailbutler provides UI with rendering email tracking statistics - /emailbutler/
139
141
 
140
142
  ## License
141
143
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
144
+
145
+ ## Sponsors
146
+
147
+ [<img width="200" src="https://evrone.com/logo/evrone-sponsored-logo.png">](https://evrone.com/?utm_source=emailbutler)
@@ -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
@@ -21,7 +21,7 @@ module Emailbutler
21
21
  FAILED = 'failed'
22
22
  DELIVERED = 'delivered'
23
23
 
24
- enum status: { CREATED => 0, REJECTED => 1, PROCESSED => 2, FAILED => 3, DELIVERED => 4 }
24
+ enum :status, { CREATED => 0, REJECTED => 1, PROCESSED => 2, FAILED => 3, DELIVERED => 4 }
25
25
 
26
26
  after_initialize :generate_uuid
27
27
 
@@ -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 }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Emailbutler
4
- VERSION = '0.8.3'
4
+ VERSION = '0.8.5'
5
5
  end
@@ -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? || status.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? || status.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? || status.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.3
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-07-15 00:00:00.000000000 Z
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